|
12341
|
545
|
34
|
2026-05-09T08:47:22.537412+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778316442537_m1.jpg...
|
Firefox
|
Обновление на тарифните компоненти за транспорт - Обновление на тарифните компоненти за транспорт - kovaliklukas@gmail.com - Gmail — Personal...
|
True
|
mail.google.com/mail/u/0/#inbox/FMfcgzQgLjRrBbkWwl mail.google.com/mail/u/0/#inbox/FMfcgzQgLjRrBbkWwlKvQjNGMMnKtfdH...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Обновление на тарифните компоненти за транспорт - [EMAIL] - Gmail
Обновление на тарифните компоненти за транспорт - [EMAIL] - Gmail
Close tab
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Select: payments - db - Adminer
Select: payments - db - Adminer
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
None selected
Skip to content
Skip to content
Using Gmail with screen readers
Using Gmail with screen readers
Main menu
Gmail
Search
Search
Search mail
Advanced search options
Search mail
Support
Settings
Ask Gemini
Google apps
Google Account: Lukáš Koválik ([EMAIL])
Compose
Labels
Labels
Inbox 24 unread
Inbox
24
Starred
Starred
Snoozed
Snoozed
Important
Important
Sent
Sent
Drafts 8 unread
Drafts
8
Purchases has menu
Purchases
Social 5202 unread has menu
Social
5,202
Updates 8787 unread has menu
Updates
8,787
Forums 6100 unread has menu
Forums
6,100
Promotions 38752 unread has menu
Promotions
38,752
More labels
More
Labels
Labels
Create new label
Labels
Labels
[Imap]/Nevyžiadaná pošta has menu
[Imap]/Nevyžiadaná pošta
arch has menu
arch
Deleted Items has menu
Deleted Items
Fibank 1229 unread has menu
Fibank
1,229
FL 6 unread has menu
FL
6
Hardware & Software has menu
Hardware & Software
HOSTING 5 unread has menu
HOSTING
5
Infected Items has menu
Infected Items
jiminny-github 7487 unread has menu
jiminny-github
7,487
Junk E-mail 219 unread has menu
Junk E-mail
219
Kontakty has menu
Kontakty
Sent Items has menu
Sent Items
WORK 848 unread has menu
WORK
848
z centra 1274 unread has menu
z centra
1,274
More labels
More
Back to Inbox
Archive
Report spam
Delete
Mark as unread
Move to
More email options
27
of
21,245
Newer
Older
Input tools on/off (Ctrl-Shift-K)
Select input tool
Print all
In new window
Обновление на тарифните компоненти за транспорт
Обновление на тарифните компоненти за транспорт
Not important
Search for all messages with label Inbox
Remove label Inbox from this conversation
GGBG.bg
GGBG.bg
GGBG.bg
Tue 5 May, 21:36 (4 days ago)
Tue 5 May, 21:36 (4 days ago)
Not starred
Add reaction
Reply
More message options
to
me
Show details
It looks like this message is in Bulgarian
Translate to English
Translate to English
Dismiss
Здравейте, Lukas Kovalik!
Нашата концепция е да поддържаме възможно най-ниски цени за предлагания от нас пакет услуги. Като доказателство цените ни на килограм остават непроменени от 2020 г (Брекзит), въпреки всички промени в икономическата среда. През последните седмици бяхме изправени пред три последователни увеличения на цените от страна на транспортните ни партньори, като последното беше наложено тази сутрин. Те са свързани с ръст на цените на петрола, пътните такси, застраховки, което оказва пряко влияние върху транспортните разходи и прави невъзможно запазването на досегашните нива. Поради това, считано от 01.06.2026, се налага актуализация на цените на килограм, както следва: Германия: 2 евро/кг (за всеки започнат килограм) Великобритания: 3 евро/кг (за всеки започнат килограм) - минималната корекция, засягаща единствено посочените ставки. Останалите цени и тарифни компоненти остават непроменени. Тази промяна е необходима, за да продължим да осигуряваме надеждна услуга и навременно доставяне на Вашите пратки. С Уважение: Екип GGBG
Оставаме на разположение,
Екипът на
GGBG.bg
GGBG.bg
Тел.:
+359 894 484 488
+359 894 484 488
Имейл:
[EMAIL]
[EMAIL]
Facebook
Facebook
Reply
Reply
Forward
Forward
Add reaction
Calendar
Keep
Tasks
Contacts
Get add-ons
Hide side panel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DNS / Nameservers | Hostinger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DNS / Nameservers | Hostinger","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AFFiNE - All In One KnowledgeOS","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All docs · AFFiNE","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Payments Logger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Payments Logger","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Обновление на тарифните компоненти за транспорт - kovaliklukas@gmail.com - Gmail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Обновление на тарифните компоненти за транспорт - kovaliklukas@gmail.com - Gmail","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(25) Quora","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(25) Quora","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Location Logger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Select: payments - db - Adminer","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select: payments - db - Adminer","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.13229166,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.15520833,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.17847222,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.20173611,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.225,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None selected","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Using Gmail with screen readers","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Using Gmail with screen readers","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Main menu","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"Gmail","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Search","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search mail","depth":18,"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Advanced search options","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search mail","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Support","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Settings","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ask Gemini","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Google Account: Lukáš Koválik (kovaliklukas@gmail.com)","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Compose","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Labels","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox 24 unread","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Starred","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Starred","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Snoozed","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Snoozed","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Important","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Important","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sent","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sent","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Drafts 8 unread","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Drafts","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Purchases has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Purchases","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Social 5202 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Social","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,202","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Updates 8787 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Updates","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8,787","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forums 6100 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forums","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6,100","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Promotions 38752 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Promotions","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"38,752","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More labels","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Labels","depth":11,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create new label","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Labels","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"[Imap]/Nevyžiadaná pošta has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[Imap]/Nevyžiadaná pošta","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"arch has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"arch","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deleted Items has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deleted Items","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Fibank 1229 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Fibank","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,229","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"FL 6 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"FL","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Hardware & Software has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hardware & Software","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"HOSTING 5 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"HOSTING","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Infected Items has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Infected Items","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"jiminny-github 7487 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny-github","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7,487","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Junk E-mail 219 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Junk E-mail","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"219","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Kontakty has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Kontakty","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sent Items has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sent Items","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"WORK 848 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"WORK","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"848","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"z centra 1274 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"z centra","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,274","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More labels","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Back to Inbox","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Archive","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Report spam","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Delete","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Mark as unread","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Move to","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"More email options","depth":11,"on_screen":true,"help_text":"More","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"27","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"of","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21,245","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Newer","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Older","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Input tools on/off (Ctrl-Shift-K)","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Select input tool","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Print all","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"In new window","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Обновление на тарифните компоненти за транспорт","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Обновление на тарифните компоненти за транспорт","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Not important","depth":14,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search for all messages with label Inbox","depth":15,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Remove label Inbox from this conversation","depth":15,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"GGBG.bg","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXCell","text":"GGBG.bg","depth":24,"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GGBG.bg","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Tue 5 May, 21:36 (4 days ago)","depth":20,"on_screen":true,"help_text":"5 May 2026, 21:36","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tue 5 May, 21:36 (4 days ago)","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Not starred","depth":21,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Add reaction","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Reply","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More message options","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"to","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"me","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Show details","depth":23,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"It looks like this message is in Bulgarian","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Translate to English","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Translate to English","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Здравейте, Lukas Kovalik!","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Нашата концепция е да поддържаме възможно най-ниски цени за предлагания от нас пакет услуги. Като доказателство цените ни на килограм остават непроменени от 2020 г (Брекзит), въпреки всички промени в икономическата среда. През последните седмици бяхме изправени пред три последователни увеличения на цените от страна на транспортните ни партньори, като последното беше наложено тази сутрин. Те са свързани с ръст на цените на петрола, пътните такси, застраховки, което оказва пряко влияние върху транспортните разходи и прави невъзможно запазването на досегашните нива. Поради това, считано от 01.06.2026, се налага актуализация на цените на килограм, както следва: Германия: 2 евро/кг (за всеки започнат килограм) Великобритания: 3 евро/кг (за всеки започнат килограм) - минималната корекция, засягаща единствено посочените ставки. Останалите цени и тарифни компоненти остават непроменени. Тази промяна е необходима, за да продължим да осигуряваме надеждна услуга и навременно доставяне на Вашите пратки. С Уважение: Екип GGBG","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Оставаме на разположение,","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Екипът на","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GGBG.bg","depth":25,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GGBG.bg","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Тел.:","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"+359 894 484 488","depth":24,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"+359 894 484 488","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Имейл:","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"info@ggbg.bg","depth":24,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"info@ggbg.bg","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Facebook","depth":24,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Facebook","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reply","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reply","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forward","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forward","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add reaction","depth":15,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Calendar","depth":10,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Keep","depth":10,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Tasks","depth":10,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Contacts","depth":10,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Get add-ons","depth":10,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Hide side panel","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-8601020962171841860
|
-3752395572121161793
|
click
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Обновление на тарифните компоненти за транспорт - [EMAIL] - Gmail
Обновление на тарифните компоненти за транспорт - [EMAIL] - Gmail
Close tab
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Select: payments - db - Adminer
Select: payments - db - Adminer
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
None selected
Skip to content
Skip to content
Using Gmail with screen readers
Using Gmail with screen readers
Main menu
Gmail
Search
Search
Search mail
Advanced search options
Search mail
Support
Settings
Ask Gemini
Google apps
Google Account: Lukáš Koválik ([EMAIL])
Compose
Labels
Labels
Inbox 24 unread
Inbox
24
Starred
Starred
Snoozed
Snoozed
Important
Important
Sent
Sent
Drafts 8 unread
Drafts
8
Purchases has menu
Purchases
Social 5202 unread has menu
Social
5,202
Updates 8787 unread has menu
Updates
8,787
Forums 6100 unread has menu
Forums
6,100
Promotions 38752 unread has menu
Promotions
38,752
More labels
More
Labels
Labels
Create new label
Labels
Labels
[Imap]/Nevyžiadaná pošta has menu
[Imap]/Nevyžiadaná pošta
arch has menu
arch
Deleted Items has menu
Deleted Items
Fibank 1229 unread has menu
Fibank
1,229
FL 6 unread has menu
FL
6
Hardware & Software has menu
Hardware & Software
HOSTING 5 unread has menu
HOSTING
5
Infected Items has menu
Infected Items
jiminny-github 7487 unread has menu
jiminny-github
7,487
Junk E-mail 219 unread has menu
Junk E-mail
219
Kontakty has menu
Kontakty
Sent Items has menu
Sent Items
WORK 848 unread has menu
WORK
848
z centra 1274 unread has menu
z centra
1,274
More labels
More
Back to Inbox
Archive
Report spam
Delete
Mark as unread
Move to
More email options
27
of
21,245
Newer
Older
Input tools on/off (Ctrl-Shift-K)
Select input tool
Print all
In new window
Обновление на тарифните компоненти за транспорт
Обновление на тарифните компоненти за транспорт
Not important
Search for all messages with label Inbox
Remove label Inbox from this conversation
GGBG.bg
GGBG.bg
GGBG.bg
Tue 5 May, 21:36 (4 days ago)
Tue 5 May, 21:36 (4 days ago)
Not starred
Add reaction
Reply
More message options
to
me
Show details
It looks like this message is in Bulgarian
Translate to English
Translate to English
Dismiss
Здравейте, Lukas Kovalik!
Нашата концепция е да поддържаме възможно най-ниски цени за предлагания от нас пакет услуги. Като доказателство цените ни на килограм остават непроменени от 2020 г (Брекзит), въпреки всички промени в икономическата среда. През последните седмици бяхме изправени пред три последователни увеличения на цените от страна на транспортните ни партньори, като последното беше наложено тази сутрин. Те са свързани с ръст на цените на петрола, пътните такси, застраховки, което оказва пряко влияние върху транспортните разходи и прави невъзможно запазването на досегашните нива. Поради това, считано от 01.06.2026, се налага актуализация на цените на килограм, както следва: Германия: 2 евро/кг (за всеки започнат килограм) Великобритания: 3 евро/кг (за всеки започнат килограм) - минималната корекция, засягаща единствено посочените ставки. Останалите цени и тарифни компоненти остават непроменени. Тази промяна е необходима, за да продължим да осигуряваме надеждна услуга и навременно доставяне на Вашите пратки. С Уважение: Екип GGBG
Оставаме на разположение,
Екипът на
GGBG.bg
GGBG.bg
Тел.:
+359 894 484 488
+359 894 484 488
Имейл:
[EMAIL]
[EMAIL]
Facebook
Facebook
Reply
Reply
Forward
Forward
Add reaction
Calendar
Keep
Tasks
Contacts
Get add-ons
Hide side panel...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
12532
|
554
|
34
|
2026-05-09T09:07:06.648318+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778317626648_m2.jpg...
|
Firefox
|
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom — P Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom — Personal...
|
True
|
www.vivacom.bg/devices/samsung-galaxy-a57-5g-256gb www.vivacom.bg/devices/samsung-galaxy-a57-5g-256gb/000000000050014295_57917...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Select: payments - db - Adminer
Select: payments - db - Adminer
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
VIVACOM
VIVACOM
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
VIVACOM
VIVACOM
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Премини към основното съдържание
Активиране на достъпност за хора със слабо зрение
Отворете менюто за достъпност
ЧАСТНИ КЛИЕНТИ
ЧАСТНИ КЛИЕНТИ
БИЗНЕС КЛИЕНТИ
БИЗНЕС КЛИЕНТИ
Cart
Мобилни услуги
Устройства
EON
Интернет
Други услуги
Помощ
МАГАЗИНИ
МАГАЗИНИ
ГЛЕДАЙ EON
ГЛЕДАЙ EON
КОНТАКТИ
КОНТАКТИ
ОБЩИ УСЛОВИЯ
ОБЩИ УСЛОВИЯ
ОБЩИ УСЛОВИЯ
ОБЩИ УСЛОВИЯ
КАРТИ НА ПОКРИТИЕТО
КАРТИ НА ПОКРИТИЕТО
Accessibility widget
Vivacom Logo
Преподпиши своята мобилна услуга онлайн
Преподпиши своята мобилна услуга онлайн
Виж предложенията за преподписване за твоите услуги
Виж офертите Виж офертите
Виж офертите
Виж офертите
ОБРАТНО КЪМ УСТРОЙСТВА
ОБРАТНО КЪМ УСТРОЙСТВА
СПОДЕЛИ
СПОДЕЛИ
Изглед отпред
Изглед отдясно
Изглед отзад
Вижте 3D на цял екран
Зарядно устройство
Безплатна доставка
14-дневен срок за връщане
Samsung
SAMSUNG GALAXY A57 5G 256GB
SAMSUNG GALAXY A57 5G 256GB
AWESOME GRAY 256GB
17.32
€
|
33.87
лв.
/мес.
18.99
€
|
37.14
лв.
/мес.
24 месечни вноски с
Unlimited MAX
Цена без абонамент
559.00
€
|
1093.31
лв.
fiche_a57_bg_20260401_143340.pdf
Продуктов информационен лист
Конфигурирай устройство
1
Модел
2
План
3
Цена
Избери цвят
Избери цвят
Избран цвят:
AWESOME GRAY
Капацитет
Капацитет
256GB
256GB
256GB
256GB
Виж всички характеристики
Виж всички характеристики
Добави мобилен план Добави мобилен план
Добави мобилен план
Добави мобилен план
Мобилен план цена на месец
Unlimited MAX
29.90
€
|
58.48
лв.
/мес.
Устройство цена на месец
SAMSUNG GALAXY A57 5G 256GB
17.32
€
|
33.87
лв.
/мес.
Обща сума на месец
за първите 24 месеца
47.22
€
|
92.35
лв.
/мес.
SAMSUNG GALAXY A57 5G 256GB
Характеристики
Характеристики
Общи
Дисплей
Камера
Операционна система
Процесор
Свързаност
Памет
Батерия
Адаптер
Екстри
ТАС серия
SAMSUNG GALAXY A57 5G 256GB
височина/ширина/дебелина
161.5 x 76.8 x 6.9 мм
Тегло (гр)
179
IP
IP67
Скенер за пръстови отпечатъци
ДА
2G
ДА
3G
ДА
4G
ДА
5G
ДА
VoLTE
ДА
VoWiFi
ДА
Тип СИМ карта
NANO SIM
СИМ слотове
Двоен Nano SIM + eSIM
Компанията
Компанията
За нас
За нас
Етика и съответствие
Етика и съответствие
Марката Vivacom
Марката Vivacom
Мениджмънт
Мениджмънт
Социална отговорност
Социална отговорност
Новини
Новини
Кариери
Кариери
Доставчици
Доставчици
Доклад за устойчиво развитие
Доклад за устойчиво развитие
Частни клиенти
Частни клиенти
Мобилни планове
Мобилни планове
Мобилен интернет
Мобилен интернет
Устройства
Устройства
Интернет пакети
Интернет пакети
Програма Лоялен клиент
Програма Лоялен клиент
Правила и условия
Правила и условия
Общи условия
Общи условия
Мобилно покритие
Мобилно покритие
Лични данни
Лични данни
Правила за ползване
Правила за ползване
Роуминг
Роуминг
Политика за бисквитките
Политика за бисквитките
Полезни връзки
Полезни връзки
Устройство в сервиз
Устройство в сервиз
Спешни номера
Спешни номера
Активиране на EON TV
Активиране на EON TV
Настройки на CA модул
Настройки на CA модул
Застраховки
Застраховки
Планове за хора с увреждания
Планове за хора с увреждания
Достъпност на сайта
Достъпност на сайта
Електронни фактури
Електронни фактури
EUR BGN
Валутен курс: 1 EUR = 1.95583 лв.
© VIVACOM 2026
Google app
App store
Huawei store
Facebook
TikTok
YouTube
Instagram
Linkedin
United group
Отворена джаджа за чат
1
Open CMP widget...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.080784574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DNS / Nameservers | Hostinger","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DNS / Nameservers | Hostinger","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.053856384,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.040724736,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.03756649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.11469415,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AFFiNE - All In One KnowledgeOS","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.05851064,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All docs · AFFiNE","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.029587766,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Payments Logger","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Payments Logger","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.030086435,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.06898271,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"(25) Quora","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(25) Quora","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.018949468,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Location Logger","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":5,"bounds":{"left":0.013297873,"top":0.4884278,"width":0.028091755,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"bounds":{"left":0.013297873,"top":0.5211492,"width":0.021609042,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"bounds":{"left":0.013297873,"top":0.55387074,"width":0.021609042,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Select: payments - db - Adminer","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select: payments - db - Adminer","depth":5,"bounds":{"left":0.013297873,"top":0.5865922,"width":0.05651596,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":5,"bounds":{"left":0.013297873,"top":0.61931366,"width":0.09059176,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":5,"bounds":{"left":0.013297873,"top":0.6520351,"width":0.113696806,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"bounds":{"left":0.0,"top":0.6735834,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIVACOM","depth":5,"bounds":{"left":0.013297873,"top":0.6847566,"width":0.016788565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":4,"bounds":{"left":0.0,"top":0.70630485,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":5,"bounds":{"left":0.013297873,"top":0.71747804,"width":0.10239362,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"bounds":{"left":0.0,"top":0.7390263,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIVACOM","depth":5,"bounds":{"left":0.013297873,"top":0.7501995,"width":0.016788565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":4,"bounds":{"left":0.0,"top":0.7717478,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":5,"bounds":{"left":0.013297873,"top":0.782921,"width":0.098902926,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.10139628,"top":0.77893054,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.80606544,"width":0.108211435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Премини към основното съдържание","depth":7,"bounds":{"left":0.1263298,"top":0.0,"width":0.10472074,"height":0.05027933},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Активиране на достъпност за хора със слабо зрение","depth":7,"bounds":{"left":0.1263298,"top":0.0,"width":0.10472074,"height":0.05027933},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Отворете менюто за достъпност","depth":7,"bounds":{"left":0.1263298,"top":0.0,"width":0.10472074,"height":0.05027933},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"ЧАСТНИ КЛИЕНТИ","depth":10,"bounds":{"left":0.113696806,"top":0.0518755,"width":0.04105718,"height":0.025538707},"on_screen":true,"help_text":"Частни клиенти","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ЧАСТНИ КЛИЕНТИ","depth":11,"bounds":{"left":0.11635638,"top":0.05865922,"width":0.035738032,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"БИЗНЕС КЛИЕНТИ","depth":10,"bounds":{"left":0.15475398,"top":0.0518755,"width":0.04055851,"height":0.025538707},"on_screen":true,"help_text":"Бизнес клиенти","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"БИЗНЕС КЛИЕНТИ","depth":11,"bounds":{"left":0.15741356,"top":0.05865922,"width":0.03523936,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Cart","depth":8,"bounds":{"left":0.46742022,"top":0.08858739,"width":0.015957447,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Мобилни услуги","depth":12,"bounds":{"left":0.57130986,"top":0.19074222,"width":0.064494684,"height":0.026735835},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Устройства","depth":12,"bounds":{"left":0.57130986,"top":0.23144454,"width":0.05219415,"height":0.026735835},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EON","depth":12,"bounds":{"left":0.57130986,"top":0.2725459,"width":0.016123671,"height":0.026735835},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Интернет","depth":12,"bounds":{"left":0.57130986,"top":0.31324822,"width":0.04438165,"height":0.026735835},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Други услуги","depth":12,"bounds":{"left":0.57130986,"top":0.35395053,"width":0.05319149,"height":0.026735835},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Помощ","depth":12,"bounds":{"left":0.57130986,"top":0.39505187,"width":0.028756648,"height":0.026735835},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"МАГАЗИНИ","depth":11,"bounds":{"left":0.57130986,"top":0.45610535,"width":0.021941489,"height":0.012769354},"on_screen":false,"help_text":"Магазини","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"МАГАЗИНИ","depth":12,"bounds":{"left":0.57130986,"top":0.4557063,"width":0.021941489,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ГЛЕДАЙ EON","depth":11,"bounds":{"left":0.57130986,"top":0.4884278,"width":0.02443484,"height":0.0131683955},"on_screen":false,"help_text":"Гледай EON","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ГЛЕДАЙ EON","depth":12,"bounds":{"left":0.57130986,"top":0.48802873,"width":0.02443484,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"КОНТАКТИ","depth":11,"bounds":{"left":0.57130986,"top":0.5211492,"width":0.021110373,"height":0.012769354},"on_screen":false,"help_text":"Контакти","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"КОНТАКТИ","depth":12,"bounds":{"left":0.57130986,"top":0.5207502,"width":0.021110373,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ОБЩИ УСЛОВИЯ","depth":11,"bounds":{"left":0.57130986,"top":0.5534717,"width":0.03174867,"height":0.0131683955},"on_screen":false,"help_text":"Общи условия","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ОБЩИ УСЛОВИЯ","depth":12,"bounds":{"left":0.57130986,"top":0.5534717,"width":0.03174867,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ОБЩИ УСЛОВИЯ","depth":11,"bounds":{"left":0.57130986,"top":0.58619314,"width":0.03174867,"height":0.012769354},"on_screen":false,"help_text":"Общи условия","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ОБЩИ УСЛОВИЯ","depth":12,"bounds":{"left":0.57130986,"top":0.5857941,"width":0.03174867,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"КАРТИ НА ПОКРИТИЕТО","depth":11,"bounds":{"left":0.57130986,"top":0.6189146,"width":0.047041222,"height":0.012769354},"on_screen":false,"help_text":"Карти на покритието","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"КАРТИ НА ПОКРИТИЕТО","depth":12,"bounds":{"left":0.57130986,"top":0.61851555,"width":0.047041222,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Accessibility widget","depth":11,"bounds":{"left":0.57130986,"top":0.6480447,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Vivacom Logo","depth":8,"bounds":{"left":0.119015954,"top":0.09457303,"width":0.055851065,"height":0.013567438},"on_screen":true,"help_text":"Home","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Преподпиши своята мобилна услуга онлайн","depth":9,"bounds":{"left":0.19564494,"top":0.13926576,"width":0.13464096,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Преподпиши своята мобилна услуга онлайн","depth":10,"bounds":{"left":0.19564494,"top":0.13926576,"width":0.13464096,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Виж предложенията за преподписване за твоите услуги","depth":10,"bounds":{"left":0.19564494,"top":0.15841979,"width":0.13098404,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Виж офертите Виж офертите","depth":9,"bounds":{"left":0.3515625,"top":0.13647246,"width":0.06648936,"height":0.03990423},"on_screen":true,"help_text":"Виж офертите","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Виж офертите","depth":11,"bounds":{"left":0.3665226,"top":0.14884278,"width":0.03656915,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Виж офертите","depth":11,"bounds":{"left":0.3665226,"top":0.16480447,"width":0.03656915,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ОБРАТНО КЪМ УСТРОЙСТВА","depth":9,"bounds":{"left":0.12034574,"top":0.20710295,"width":0.07662899,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ОБРАТНО КЪМ УСТРОЙСТВА","depth":10,"bounds":{"left":0.12932181,"top":0.20670392,"width":0.067652926,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"СПОДЕЛИ","depth":9,"bounds":{"left":0.45694813,"top":0.20351157,"width":0.036402926,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"СПОДЕЛИ","depth":10,"bounds":{"left":0.46958113,"top":0.20670392,"width":0.023769947,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Изглед отпред","depth":14,"bounds":{"left":0.12034574,"top":0.31364724,"width":0.032912236,"height":0.08220271},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Изглед отдясно","depth":14,"bounds":{"left":0.12034574,"top":0.40223464,"width":0.032912236,"height":0.08220271},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Изглед отзад","depth":14,"bounds":{"left":0.12034574,"top":0.49082202,"width":0.032912236,"height":0.08220271},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Вижте 3D на цял екран","depth":11,"bounds":{"left":0.28125,"top":0.5897845,"width":0.023271276,"height":0.05586592},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Зарядно устройство","depth":11,"bounds":{"left":0.15425532,"top":0.7094972,"width":0.049035903,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Безплатна доставка","depth":11,"bounds":{"left":0.2165891,"top":0.7102953,"width":0.025265958,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14-дневен срок за връщане","depth":11,"bounds":{"left":0.26246676,"top":0.7102953,"width":0.034242023,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Samsung","depth":11,"bounds":{"left":0.3179854,"top":0.28092578,"width":0.020113032,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"SAMSUNG GALAXY A57 5G 256GB","depth":10,"bounds":{"left":0.3179854,"top":0.29289705,"width":0.08743351,"height":0.09696728},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAMSUNG GALAXY A57 5G 256GB","depth":11,"bounds":{"left":0.3179854,"top":0.29289705,"width":0.072972074,"height":0.09736632},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AWESOME GRAY 256GB","depth":11,"bounds":{"left":0.3179854,"top":0.38986433,"width":0.053357713,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17.32","depth":11,"bounds":{"left":0.42037898,"top":0.32242617,"width":0.018450798,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":11,"bounds":{"left":0.43882978,"top":0.32242617,"width":0.0071476065,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":11,"bounds":{"left":0.4459774,"top":0.32242617,"width":0.0019946808,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"33.87","depth":11,"bounds":{"left":0.4496343,"top":0.32242617,"width":0.020944148,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":11,"bounds":{"left":0.47057846,"top":0.32242617,"width":0.011968086,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/мес.","depth":11,"bounds":{"left":0.48254654,"top":0.33280128,"width":0.010804521,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18.99","depth":11,"bounds":{"left":0.45345744,"top":0.34836394,"width":0.009807181,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":11,"bounds":{"left":0.4632646,"top":0.34836394,"width":0.003656915,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":11,"bounds":{"left":0.46692154,"top":0.34836394,"width":0.0009973404,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37.14","depth":11,"bounds":{"left":0.46875,"top":0.34836394,"width":0.008976064,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":11,"bounds":{"left":0.47772607,"top":0.34836394,"width":0.005817819,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/мес.","depth":11,"bounds":{"left":0.48354387,"top":0.349162,"width":0.009807181,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24 месечни вноски с","depth":11,"bounds":{"left":0.4212101,"top":0.3623304,"width":0.043218084,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unlimited MAX","depth":11,"bounds":{"left":0.4644282,"top":0.3623304,"width":0.028922873,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Цена без абонамент","depth":11,"bounds":{"left":0.41073802,"top":0.37629688,"width":0.04488032,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"559.00","depth":11,"bounds":{"left":0.45561835,"top":0.37629688,"width":0.012965426,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":11,"bounds":{"left":0.46858376,"top":0.37629688,"width":0.003656915,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":11,"bounds":{"left":0.4722407,"top":0.37629688,"width":0.0011635638,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1093.31","depth":11,"bounds":{"left":0.4742354,"top":0.37629688,"width":0.013297873,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":11,"bounds":{"left":0.48753324,"top":0.37629688,"width":0.005817819,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"fiche_a57_bg_20260401_143340.pdf","depth":10,"bounds":{"left":0.35854387,"top":0.43335995,"width":0.09790558,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Продуктов информационен лист","depth":12,"bounds":{"left":0.36552528,"top":0.43136472,"width":0.0909242,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Конфигурирай устройство","depth":12,"bounds":{"left":0.3246343,"top":0.490423,"width":0.07396942,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":12,"bounds":{"left":0.3336104,"top":0.5319234,"width":0.0023271276,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Модел","depth":12,"bounds":{"left":0.32729387,"top":0.5582602,"width":0.014960106,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":12,"bounds":{"left":0.4055851,"top":0.5319234,"width":0.0031582448,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"План","depth":12,"bounds":{"left":0.40159574,"top":0.5582602,"width":0.011303191,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":12,"bounds":{"left":0.4765625,"top":0.5319234,"width":0.0031582448,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Цена","depth":12,"bounds":{"left":0.4722407,"top":0.5582602,"width":0.011801862,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Избери цвят","depth":10,"bounds":{"left":0.32862368,"top":0.6117318,"width":0.1540891,"height":0.018754989},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Избери цвят","depth":11,"bounds":{"left":0.32862368,"top":0.6113328,"width":0.038065158,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Избран цвят:","depth":11,"bounds":{"left":0.32862368,"top":0.67677575,"width":0.03324468,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AWESOME GRAY","depth":11,"bounds":{"left":0.36186835,"top":0.67478055,"width":0.03939495,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Капацитет","depth":11,"bounds":{"left":0.32862368,"top":0.7178771,"width":0.1540891,"height":0.018754989},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Капацитет","depth":12,"bounds":{"left":0.32862368,"top":0.71747804,"width":0.034408245,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"256GB","depth":11,"bounds":{"left":0.32862368,"top":0.7462091,"width":0.027260639,"height":0.037509978},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"256GB","depth":12,"on_screen":false,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"256GB","depth":13,"bounds":{"left":0.33061835,"top":0.75418997,"width":0.023271276,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"256GB","depth":14,"bounds":{"left":0.3316157,"top":0.7537909,"width":0.021110373,"height":0.021947326},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Виж всички характеристики","depth":11,"bounds":{"left":0.32862368,"top":0.7932961,"width":0.07480053,"height":0.016360734},"on_screen":true,"help_text":"See all Specifications","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Виж всички характеристики","depth":12,"bounds":{"left":0.32862368,"top":0.792498,"width":0.07480053,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Добави мобилен план Добави мобилен план","depth":10,"bounds":{"left":0.4019282,"top":0.8256185,"width":0.080784574,"height":0.041101355},"on_screen":true,"help_text":"Добави мобилен план","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Добави мобилен план","depth":12,"bounds":{"left":0.41256648,"top":0.83838785,"width":0.051529255,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Добави мобилен план","depth":12,"bounds":{"left":0.41256648,"top":0.85355145,"width":0.051529255,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Мобилен план цена на месец","depth":11,"bounds":{"left":0.3352726,"top":0.943336,"width":0.07280585,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unlimited MAX","depth":11,"bounds":{"left":0.3352726,"top":0.9688747,"width":0.03557181,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"29.90","depth":11,"bounds":{"left":0.4268617,"top":0.9688747,"width":0.012632979,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":11,"bounds":{"left":0.43949467,"top":0.9688747,"width":0.004488032,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":11,"bounds":{"left":0.44398272,"top":0.9688747,"width":0.0011635638,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"58.48","depth":11,"bounds":{"left":0.44630983,"top":0.9688747,"width":0.012799202,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":11,"bounds":{"left":0.45910904,"top":0.9688747,"width":0.0071476065,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/мес.","depth":11,"bounds":{"left":0.46625665,"top":0.9724661,"width":0.009807181,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Устройство цена на месец","depth":11,"bounds":{"left":0.3352726,"top":0.99561054,"width":0.070644945,"height":0.004389465},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAMSUNG GALAXY A57 5G 256GB","depth":11,"bounds":{"left":0.3352726,"top":1.0,"width":0.08111702,"height":-0.020750165},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17.32","depth":11,"bounds":{"left":0.43001994,"top":1.0,"width":0.010139627,"height":-0.020750165},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":11,"bounds":{"left":0.4401596,"top":1.0,"width":0.004488032,"height":-0.020750165},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":11,"bounds":{"left":0.4446476,"top":1.0,"width":0.0013297872,"height":-0.020750165},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"33.87","depth":11,"bounds":{"left":0.44697472,"top":1.0,"width":0.012134309,"height":-0.020750165},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":11,"bounds":{"left":0.45910904,"top":1.0,"width":0.0071476065,"height":-0.020750165},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/мес.","depth":11,"bounds":{"left":0.46625665,"top":1.0,"width":0.009807181,"height":-0.024341583},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Обща сума на месец","depth":11,"bounds":{"left":0.3352726,"top":1.0,"width":0.051529255,"height":-0.073822856},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"за първите 24 месеца","depth":11,"bounds":{"left":0.3352726,"top":1.0,"width":0.06100399,"height":-0.098962545},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47.22","depth":11,"bounds":{"left":0.42270613,"top":1.0,"width":0.013131649,"height":-0.098962545},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":11,"bounds":{"left":0.43583778,"top":1.0,"width":0.0048204786,"height":-0.098962545},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":11,"bounds":{"left":0.44065824,"top":1.0,"width":0.0013297872,"height":-0.098962545},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"92.35","depth":11,"bounds":{"left":0.4429854,"top":1.0,"width":0.014295213,"height":-0.098962545},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":11,"bounds":{"left":0.45728058,"top":1.0,"width":0.007978723,"height":-0.098962545},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/мес.","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAMSUNG GALAXY A57 5G 256GB","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Характеристики","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Характеристики","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Общи","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Дисплей","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Камера","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Операционна система","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Процесор","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Свързаност","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Памет","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Батерия","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Адаптер","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Екстри","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ТАС серия","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAMSUNG GALAXY A57 5G 256GB","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"височина/ширина/дебелина","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"161.5 x 76.8 x 6.9 мм","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Тегло (гр)","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"179","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"IP","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"IP67","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Скенер за пръстови отпечатъци","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДА","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2G","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДА","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3G","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДА","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4G","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДА","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5G","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДА","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VoLTE","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДА","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VoWiFi","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДА","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Тип СИМ карта","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NANO SIM","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"СИМ слотове","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Двоен Nano SIM + eSIM","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Компанията","depth":8,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Компанията","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"За нас","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"За нас","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Етика и съответствие","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Етика и съответствие","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Марката Vivacom","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Марката Vivacom","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Мениджмънт","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Мениджмънт","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Социална отговорност","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Социална отговорност","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Новини","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Новини","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Кариери","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Кариери","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Доставчици","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Доставчици","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Доклад за устойчиво развитие","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Доклад за устойчиво развитие","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Частни клиенти","depth":8,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Частни клиенти","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Мобилни планове","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Мобилни планове","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Мобилен интернет","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Мобилен интернет","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Устройства","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Устройства","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Интернет пакети","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Интернет пакети","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Програма Лоялен клиент","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Програма Лоялен клиент","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Правила и условия","depth":8,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Правила и условия","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Общи условия","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Общи условия","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Мобилно покритие","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Мобилно покритие","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Лични данни","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Лични данни","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Правила за ползване","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Правила за ползване","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Роуминг","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Роуминг","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Политика за бисквитките","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Политика за бисквитките","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Полезни връзки","depth":8,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Полезни връзки","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Устройство в сервиз","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Устройство в сервиз","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Спешни номера","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Спешни номера","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Активиране на EON TV","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Активиране на EON TV","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Настройки на CA модул","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Настройки на CA модул","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Застраховки","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Застраховки","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Планове за хора с увреждания","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Планове за хора с увреждания","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Достъпност на сайта","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Достъпност на сайта","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Електронни фактури","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Електронни фактури","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR BGN","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Валутен курс: 1 EUR = 1.95583 лв.","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"© VIVACOM 2026","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Google app","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"App store","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Huawei store","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Facebook","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"TikTok","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"YouTube","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Instagram","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Linkedin","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"United group","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Отворена джаджа за чат","depth":9,"bounds":{"left":0.47340426,"top":0.93615323,"width":0.021276595,"height":0.051077414},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.49069148,"top":0.9357542,"width":0.0016622341,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open CMP widget","depth":7,"bounds":{"left":0.11702128,"top":0.9537111,"width":0.015957447,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-8496422980705669976
|
-332838958068855413
|
visual_change
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Select: payments - db - Adminer
Select: payments - db - Adminer
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
VIVACOM
VIVACOM
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
VIVACOM
VIVACOM
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Премини към основното съдържание
Активиране на достъпност за хора със слабо зрение
Отворете менюто за достъпност
ЧАСТНИ КЛИЕНТИ
ЧАСТНИ КЛИЕНТИ
БИЗНЕС КЛИЕНТИ
БИЗНЕС КЛИЕНТИ
Cart
Мобилни услуги
Устройства
EON
Интернет
Други услуги
Помощ
МАГАЗИНИ
МАГАЗИНИ
ГЛЕДАЙ EON
ГЛЕДАЙ EON
КОНТАКТИ
КОНТАКТИ
ОБЩИ УСЛОВИЯ
ОБЩИ УСЛОВИЯ
ОБЩИ УСЛОВИЯ
ОБЩИ УСЛОВИЯ
КАРТИ НА ПОКРИТИЕТО
КАРТИ НА ПОКРИТИЕТО
Accessibility widget
Vivacom Logo
Преподпиши своята мобилна услуга онлайн
Преподпиши своята мобилна услуга онлайн
Виж предложенията за преподписване за твоите услуги
Виж офертите Виж офертите
Виж офертите
Виж офертите
ОБРАТНО КЪМ УСТРОЙСТВА
ОБРАТНО КЪМ УСТРОЙСТВА
СПОДЕЛИ
СПОДЕЛИ
Изглед отпред
Изглед отдясно
Изглед отзад
Вижте 3D на цял екран
Зарядно устройство
Безплатна доставка
14-дневен срок за връщане
Samsung
SAMSUNG GALAXY A57 5G 256GB
SAMSUNG GALAXY A57 5G 256GB
AWESOME GRAY 256GB
17.32
€
|
33.87
лв.
/мес.
18.99
€
|
37.14
лв.
/мес.
24 месечни вноски с
Unlimited MAX
Цена без абонамент
559.00
€
|
1093.31
лв.
fiche_a57_bg_20260401_143340.pdf
Продуктов информационен лист
Конфигурирай устройство
1
Модел
2
План
3
Цена
Избери цвят
Избери цвят
Избран цвят:
AWESOME GRAY
Капацитет
Капацитет
256GB
256GB
256GB
256GB
Виж всички характеристики
Виж всички характеристики
Добави мобилен план Добави мобилен план
Добави мобилен план
Добави мобилен план
Мобилен план цена на месец
Unlimited MAX
29.90
€
|
58.48
лв.
/мес.
Устройство цена на месец
SAMSUNG GALAXY A57 5G 256GB
17.32
€
|
33.87
лв.
/мес.
Обща сума на месец
за първите 24 месеца
47.22
€
|
92.35
лв.
/мес.
SAMSUNG GALAXY A57 5G 256GB
Характеристики
Характеристики
Общи
Дисплей
Камера
Операционна система
Процесор
Свързаност
Памет
Батерия
Адаптер
Екстри
ТАС серия
SAMSUNG GALAXY A57 5G 256GB
височина/ширина/дебелина
161.5 x 76.8 x 6.9 мм
Тегло (гр)
179
IP
IP67
Скенер за пръстови отпечатъци
ДА
2G
ДА
3G
ДА
4G
ДА
5G
ДА
VoLTE
ДА
VoWiFi
ДА
Тип СИМ карта
NANO SIM
СИМ слотове
Двоен Nano SIM + eSIM
Компанията
Компанията
За нас
За нас
Етика и съответствие
Етика и съответствие
Марката Vivacom
Марката Vivacom
Мениджмънт
Мениджмънт
Социална отговорност
Социална отговорност
Новини
Новини
Кариери
Кариери
Доставчици
Доставчици
Доклад за устойчиво развитие
Доклад за устойчиво развитие
Частни клиенти
Частни клиенти
Мобилни планове
Мобилни планове
Мобилен интернет
Мобилен интернет
Устройства
Устройства
Интернет пакети
Интернет пакети
Програма Лоялен клиент
Програма Лоялен клиент
Правила и условия
Правила и условия
Общи условия
Общи условия
Мобилно покритие
Мобилно покритие
Лични данни
Лични данни
Правила за ползване
Правила за ползване
Роуминг
Роуминг
Политика за бисквитките
Политика за бисквитките
Полезни връзки
Полезни връзки
Устройство в сервиз
Устройство в сервиз
Спешни номера
Спешни номера
Активиране на EON TV
Активиране на EON TV
Настройки на CA модул
Настройки на CA модул
Застраховки
Застраховки
Планове за хора с увреждания
Планове за хора с увреждания
Достъпност на сайта
Достъпност на сайта
Електронни фактури
Електронни фактури
EUR BGN
Валутен курс: 1 EUR = 1.95583 лв.
© VIVACOM 2026
Google app
App store
Huawei store
Facebook
TikTok
YouTube
Instagram
Linkedin
United group
Отворена джаджа за чат
1
Open CMP widget...
|
12531
|
NULL
|
NULL
|
NULL
|
|
12599
|
556
|
34
|
2026-05-09T09:12:31.489731+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778317951489_m2.jpg...
|
Firefox
|
Finance Hub — Personal
|
True
|
finance-hub.lakylak.xyz/outpost.goauthentik.io/sig finance-hub.lakylak.xyz/outpost.goauthentik.io/sign_out...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Close tab
Select: payments - db - Adminer
Select: payments - db - Adminer
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
VIVACOM
VIVACOM
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
VIVACOM
VIVACOM
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Finance Hub
Finance Hub
8
transaction
s
Payments
Payments
Upload CSV
Upload CSV
Refresh
Display settings
Sign out
Filters
Filters
Search...
dd
/
mm
/
yyyy
Calendar
dd
/
mm
/
yyyy
Calendar
DATE
TYPE
RECIPIENT
AMOUNT
BALANCE
STATUS
TAGS
08 May 2026
КАРТОВА ОПЕРАЦИЯ
POL BALICE Lagardere Travel R KR3
Raw data
5.49 EUR
—
Pending
Pending
Send
Send
Skip
Skip
Delete
08 May 2026
КАРТОВА ОПЕРАЦИЯ
BGR SOFIA CBA EKO MARKET
Raw data
5.51 EUR
—
Pending
Pending
Groceries
Send
Send
Skip
Skip
Delete
08 May 2026
КАРТОВА ОПЕРАЦИЯ
BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR
Raw data
67.81 EUR
—
Pending
Pending
Groceries
Send
Send
Skip
Skip
Delete
08 May 2026
—
—
Raw data
9.04 EUR
—
Pending
Pending
Send
Send
Skip
Skip
Delete
08 May 2026
—
—
Raw data
15.46 EUR
—
Pending
Pending
Send
Send
Skip
Skip
Delete
08 May 2026
—
—
Raw data
5.02 EUR
—
Pending
Pending
Send
Send
Skip
Skip
Delete
08 May 2026, 10:00
ATM
DSK ATM, SOFIA, BG
Raw data
200.00 EUR
1050.00 EUR
Pending
Pending
Send
Send
Skip
Skip
Delete
DATE
08 May 2026
08 May 2026
08 May 2026
08 May 2026
08 May 2026
08 May 2026
08 May 2026, 10:00
TYPE
КАРТОВА ОПЕРАЦИЯ
КАРТОВА ОПЕРАЦИЯ
КАРТОВА ОПЕРАЦИЯ
—
—
—
ATM
RECIPIENT
POL BALICE Lagardere Travel R KR3
Raw data
BGR SOFIA CBA EKO MARKET
Raw data
BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR
Raw data
—
Raw data
—
Raw data
—
Raw data
DSK ATM, SOFIA, BG
Raw data
AMOUNT
5.49 EUR
5.51 EUR
67.81 EUR
9.04 EUR
15.46 EUR
5.02 EUR
200.00 EUR
BALANCE
—
—
—
—
—
—
1050.00 EUR
STATUS
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
TAGS
Groceries
Groceries
Send
Send
Skip
Skip
Delete
Send
Send
Skip
Skip
Delete
Send
Send
Skip
Skip
Delete
Send
Send
Skip
Skip
Delete
Send
Send
Skip
Skip
Delete
Send
Send
Skip
Skip
Delete
Send
Send
Skip
Skip
Delete
Display Settings
Display Settings
LAYOUT
LAYOUT
Full-width
Full-width
COLUMNS
COLUMNS
Date & Time
Date & Time
Source
Source
Type
Type
Recipient
Recipient
Amount
Amount
Balance
Balance
Status
Status
Tags
Tags
Actions
Actions
SOURCE HIGHLIGHT
SOURCE HIGHLIGHT
None
None
Accent stripe
Accent stripe
Row tint
Row tint
TABLE DENSITY
TABLE DENSITY
Compact
Compact
Comfortable
Comfortable
MOBILE VIEW
MOBILE VIEW
Cards
Cards
Table (scroll)
Table (scroll)...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.080784574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DNS / Nameservers | Hostinger","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DNS / Nameservers | Hostinger","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.053856384,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.040724736,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.03756649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.11469415,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AFFiNE - All In One KnowledgeOS","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.05851064,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All docs · AFFiNE","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.029587766,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Payments Logger","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Payments Logger","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.030086435,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.06898271,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"(25) Quora","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(25) Quora","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.018949468,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Location Logger","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":5,"bounds":{"left":0.013297873,"top":0.4884278,"width":0.028091755,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"bounds":{"left":0.013297873,"top":0.5211492,"width":0.021609042,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Finance Hub","depth":5,"bounds":{"left":0.013297873,"top":0.55387074,"width":0.021609042,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.10139628,"top":0.54988027,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Select: payments - db - Adminer","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select: payments - db - Adminer","depth":5,"bounds":{"left":0.013297873,"top":0.5865922,"width":0.05651596,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":5,"bounds":{"left":0.013297873,"top":0.61931366,"width":0.09059176,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":5,"bounds":{"left":0.013297873,"top":0.6520351,"width":0.113696806,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"bounds":{"left":0.0,"top":0.6735834,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIVACOM","depth":5,"bounds":{"left":0.013297873,"top":0.6847566,"width":0.016788565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":4,"bounds":{"left":0.0,"top":0.70630485,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":5,"bounds":{"left":0.013297873,"top":0.71747804,"width":0.10239362,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"bounds":{"left":0.0,"top":0.7390263,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIVACOM","depth":5,"bounds":{"left":0.013297873,"top":0.7501995,"width":0.016788565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":4,"bounds":{"left":0.0,"top":0.7717478,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":5,"bounds":{"left":0.013297873,"top":0.782921,"width":0.098902926,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.80606544,"width":0.108211435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Finance Hub","depth":8,"bounds":{"left":0.13829787,"top":0.0622506,"width":0.032081116,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Finance Hub","depth":9,"bounds":{"left":0.13829787,"top":0.06264964,"width":0.032081116,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8","depth":9,"bounds":{"left":0.13829787,"top":0.07861133,"width":0.002493351,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"transaction","depth":9,"bounds":{"left":0.14079122,"top":0.07861133,"width":0.02244016,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"s","depth":9,"bounds":{"left":0.16323139,"top":0.07861133,"width":0.0019946808,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Payments","depth":8,"bounds":{"left":0.37982047,"top":0.06384677,"width":0.036070477,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Payments","depth":10,"bounds":{"left":0.39045876,"top":0.0698324,"width":0.02144282,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload CSV","depth":8,"bounds":{"left":0.41655585,"top":0.06384677,"width":0.04105718,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Upload CSV","depth":10,"bounds":{"left":0.42719415,"top":0.0698324,"width":0.02642952,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Refresh","depth":8,"bounds":{"left":0.6668883,"top":0.06384677,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Display settings","depth":8,"bounds":{"left":0.67952126,"top":0.06384677,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXButton","text":"Sign out","depth":8,"bounds":{"left":0.6921542,"top":0.06384677,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Filters","depth":8,"bounds":{"left":0.1299867,"top":0.13168396,"width":0.5671542,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Filters","depth":10,"bounds":{"left":0.13796543,"top":0.13288109,"width":0.013630319,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search...","depth":9,"bounds":{"left":0.1299867,"top":0.16759777,"width":0.11020612,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"dd","depth":11,"bounds":{"left":0.14328457,"top":0.21588188,"width":0.0056515955,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":10,"bounds":{"left":0.14993352,"top":0.21588188,"width":0.0013297872,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mm","depth":11,"bounds":{"left":0.15226063,"top":0.21588188,"width":0.007978723,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":10,"bounds":{"left":0.1612367,"top":0.21588188,"width":0.0013297872,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"yyyy","depth":11,"bounds":{"left":0.16356383,"top":0.21588188,"width":0.009973404,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":10,"bounds":{"left":0.40043217,"top":0.21667998,"width":0.006150266,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"dd","depth":11,"bounds":{"left":0.42885637,"top":0.21588188,"width":0.0056515955,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":10,"bounds":{"left":0.43550533,"top":0.21588188,"width":0.0013297872,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mm","depth":11,"bounds":{"left":0.43783244,"top":0.21588188,"width":0.007978723,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":10,"bounds":{"left":0.44680852,"top":0.21588188,"width":0.0013297872,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"yyyy","depth":11,"bounds":{"left":0.44913563,"top":0.21588188,"width":0.009973404,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":10,"bounds":{"left":0.686004,"top":0.21667998,"width":0.006150266,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DATE","depth":13,"bounds":{"left":0.1299867,"top":0.27813247,"width":0.011136968,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TYPE","depth":13,"bounds":{"left":0.20129654,"top":0.27813247,"width":0.011303191,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RECIPIENT","depth":13,"bounds":{"left":0.27044547,"top":0.27813247,"width":0.023105053,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AMOUNT","depth":13,"bounds":{"left":0.41605717,"top":0.27813247,"width":0.019448139,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BALANCE","depth":13,"bounds":{"left":0.46409574,"top":0.27813247,"width":0.020611702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATUS","depth":13,"bounds":{"left":0.51462764,"top":0.27813247,"width":0.016954787,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TAGS","depth":13,"bounds":{"left":0.56150264,"top":0.27813247,"width":0.011469414,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08 May 2026","depth":13,"bounds":{"left":0.1299867,"top":0.30766162,"width":0.028756648,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КАРТОВА ОПЕРАЦИЯ","depth":14,"bounds":{"left":0.20395611,"top":0.3084597,"width":0.04305186,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POL BALICE Lagardere Travel R KR3","depth":14,"bounds":{"left":0.27044547,"top":0.30766162,"width":0.07795878,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.34973404,"top":0.30885875,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5.49 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.30766162,"width":0.021110373,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.46409574,"top":0.30766162,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.3064645,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.3084597,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.3048683,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.3084597,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.30407023,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.3084597,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.30407023,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"08 May 2026","depth":13,"bounds":{"left":0.1299867,"top":0.34197924,"width":0.028756648,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КАРТОВА ОПЕРАЦИЯ","depth":14,"bounds":{"left":0.20395611,"top":0.34277734,"width":0.04305186,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BGR SOFIA CBA EKO MARKET","depth":14,"bounds":{"left":0.27044547,"top":0.34197924,"width":0.0653258,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.33710107,"top":0.34317636,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5.51 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.34197924,"width":0.021110373,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.46409574,"top":0.34197924,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.34078214,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.34277734,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Groceries","depth":13,"bounds":{"left":0.56349736,"top":0.34277734,"width":0.01861702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.33918595,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.34277734,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.33838788,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.34277734,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.33838788,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"08 May 2026","depth":13,"bounds":{"left":0.1299867,"top":0.37629688,"width":0.028756648,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КАРТОВА ОПЕРАЦИЯ","depth":14,"bounds":{"left":0.20395611,"top":0.37709498,"width":0.04305186,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR","depth":14,"bounds":{"left":0.27044547,"top":0.37629688,"width":0.10322473,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.375,"top":0.377494,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"67.81 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.37629688,"width":0.024102394,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.46409574,"top":0.37629688,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.37509975,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.37709498,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Groceries","depth":13,"bounds":{"left":0.56349736,"top":0.37709498,"width":0.01861702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.3735036,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.37709498,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.37270552,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.37709498,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.37270552,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"08 May 2026","depth":13,"bounds":{"left":0.1299867,"top":0.41061452,"width":0.028756648,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.20129654,"top":0.41061452,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.27044547,"top":0.41061452,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.27593085,"top":0.41181165,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"9.04 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.41061452,"width":0.021110373,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.46409574,"top":0.41061452,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.4094174,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.4114126,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.40782124,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.4114126,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.40702313,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.4114126,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.40702313,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"08 May 2026","depth":13,"bounds":{"left":0.1299867,"top":0.44493216,"width":0.028756648,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.20129654,"top":0.44493216,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.27044547,"top":0.44493216,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.27593085,"top":0.4461293,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"15.46 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.44493216,"width":0.024102394,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.46409574,"top":0.44493216,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.44373503,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.44573024,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.44213888,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.44573024,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.44134077,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.44573024,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.44134077,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"08 May 2026","depth":13,"bounds":{"left":0.1299867,"top":0.4792498,"width":0.028756648,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.20129654,"top":0.4792498,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.27044547,"top":0.4792498,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.27593085,"top":0.48044693,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5.02 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.4792498,"width":0.021110373,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.46409574,"top":0.4792498,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.47805268,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.48004788,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.4764565,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.48004788,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.47565842,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.48004788,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.47565842,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"08 May 2026, 10:00","depth":13,"bounds":{"left":0.1299867,"top":0.51356745,"width":0.044215426,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ATM","depth":13,"bounds":{"left":0.20395611,"top":0.5151636,"width":0.008643617,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DSK ATM, SOFIA, BG","depth":14,"bounds":{"left":0.27044547,"top":0.51356745,"width":0.04537899,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.31715426,"top":0.51476455,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"200.00 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.51356745,"width":0.027094414,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1050.00 EUR","depth":13,"bounds":{"left":0.46409574,"top":0.51356745,"width":0.028922873,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.5123703,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.5143655,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.51077414,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.5143655,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.509976,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.5143655,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.509976,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DATE","depth":13,"bounds":{"left":0.1299867,"top":0.27813247,"width":0.011136968,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08 May 2026","depth":13,"bounds":{"left":0.1299867,"top":0.30766162,"width":0.028756648,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08 May 2026","depth":13,"bounds":{"left":0.1299867,"top":0.34197924,"width":0.028756648,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08 May 2026","depth":13,"bounds":{"left":0.1299867,"top":0.37629688,"width":0.028756648,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08 May 2026","depth":13,"bounds":{"left":0.1299867,"top":0.41061452,"width":0.028756648,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08 May 2026","depth":13,"bounds":{"left":0.1299867,"top":0.44493216,"width":0.028756648,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08 May 2026","depth":13,"bounds":{"left":0.1299867,"top":0.4792498,"width":0.028756648,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08 May 2026, 10:00","depth":13,"bounds":{"left":0.1299867,"top":0.51356745,"width":0.044215426,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TYPE","depth":13,"bounds":{"left":0.20129654,"top":0.27813247,"width":0.011303191,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КАРТОВА ОПЕРАЦИЯ","depth":14,"bounds":{"left":0.20395611,"top":0.3084597,"width":0.04305186,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КАРТОВА ОПЕРАЦИЯ","depth":14,"bounds":{"left":0.20395611,"top":0.34277734,"width":0.04305186,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КАРТОВА ОПЕРАЦИЯ","depth":14,"bounds":{"left":0.20395611,"top":0.37709498,"width":0.04305186,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.20129654,"top":0.41061452,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.20129654,"top":0.44493216,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.20129654,"top":0.4792498,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ATM","depth":13,"bounds":{"left":0.20395611,"top":0.5151636,"width":0.008643617,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RECIPIENT","depth":13,"bounds":{"left":0.27044547,"top":0.27813247,"width":0.023105053,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POL BALICE Lagardere Travel R KR3","depth":14,"bounds":{"left":0.27044547,"top":0.30766162,"width":0.07795878,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.34973404,"top":0.30885875,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"BGR SOFIA CBA EKO MARKET","depth":14,"bounds":{"left":0.27044547,"top":0.34197924,"width":0.0653258,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.33710107,"top":0.34317636,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR","depth":14,"bounds":{"left":0.27044547,"top":0.37629688,"width":0.10322473,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.375,"top":0.377494,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.27044547,"top":0.41061452,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.27593085,"top":0.41181165,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.27044547,"top":0.44493216,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.27593085,"top":0.4461293,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.27044547,"top":0.4792498,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.27593085,"top":0.48044693,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DSK ATM, SOFIA, BG","depth":14,"bounds":{"left":0.27044547,"top":0.51356745,"width":0.04537899,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.31715426,"top":0.51476455,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AMOUNT","depth":13,"bounds":{"left":0.41605717,"top":0.27813247,"width":0.019448139,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.49 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.30766162,"width":0.021110373,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.51 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.34197924,"width":0.021110373,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"67.81 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.37629688,"width":0.024102394,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.04 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.41061452,"width":0.021110373,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15.46 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.44493216,"width":0.024102394,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.02 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.4792498,"width":0.021110373,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200.00 EUR","depth":13,"bounds":{"left":0.41605717,"top":0.51356745,"width":0.027094414,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BALANCE","depth":13,"bounds":{"left":0.46409574,"top":0.27813247,"width":0.020611702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.46409574,"top":0.30766162,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.46409574,"top":0.34197924,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.46409574,"top":0.37629688,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.46409574,"top":0.41061452,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.46409574,"top":0.44493216,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.46409574,"top":0.4792498,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1050.00 EUR","depth":13,"bounds":{"left":0.46409574,"top":0.51356745,"width":0.028922873,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATUS","depth":13,"bounds":{"left":0.51462764,"top":0.27813247,"width":0.016954787,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.3064645,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.3084597,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.34078214,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.34277734,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.37509975,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.37709498,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.4094174,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.4114126,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.44373503,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.44573024,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.47805268,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.48004788,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pending","depth":14,"bounds":{"left":0.51462764,"top":0.5123703,"width":0.026263298,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pending","depth":15,"bounds":{"left":0.5226064,"top":0.5143655,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TAGS","depth":13,"bounds":{"left":0.56150264,"top":0.27813247,"width":0.011469414,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Groceries","depth":13,"bounds":{"left":0.56349736,"top":0.34277734,"width":0.01861702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Groceries","depth":13,"bounds":{"left":0.56349736,"top":0.37709498,"width":0.01861702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.3048683,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.3084597,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.30407023,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.3084597,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.30407023,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.33918595,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.34277734,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.33838788,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.34277734,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.33838788,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.3735036,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.37709498,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.37270552,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.37709498,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.37270552,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.40782124,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.4114126,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.40702313,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.4114126,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.40702313,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.44213888,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.44573024,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.44134077,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.44573024,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.44134077,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.4764565,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.48004788,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.47565842,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.48004788,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.47565842,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.6215093,"top":0.51077414,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.63015294,"top":0.5143655,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.64461434,"top":0.509976,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.65359044,"top":0.5143655,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.6668883,"top":0.509976,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Display Settings","depth":8,"bounds":{"left":0.6246675,"top":0.06783719,"width":0.03656915,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Display Settings","depth":9,"bounds":{"left":0.6246675,"top":0.069034316,"width":0.03656915,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"LAYOUT","depth":10,"bounds":{"left":0.6319814,"top":0.11652035,"width":0.017453458,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LAYOUT","depth":11,"bounds":{"left":0.6319814,"top":0.11691939,"width":0.017453458,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Full-width","depth":12,"bounds":{"left":0.6246675,"top":0.14166002,"width":0.02144282,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Full-width","depth":11,"bounds":{"left":0.69481385,"top":0.14046289,"width":0.011968086,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"COLUMNS","depth":10,"bounds":{"left":0.6319814,"top":0.18036711,"width":0.021941489,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"COLUMNS","depth":11,"bounds":{"left":0.6319814,"top":0.18076617,"width":0.021941489,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Date & Time","depth":11,"bounds":{"left":0.6246675,"top":0.20670392,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date & Time","depth":12,"bounds":{"left":0.63331115,"top":0.20550679,"width":0.02642952,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Source","depth":11,"bounds":{"left":0.6246675,"top":0.23064645,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Source","depth":12,"bounds":{"left":0.63331115,"top":0.22944932,"width":0.01512633,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Type","depth":11,"bounds":{"left":0.6246675,"top":0.254589,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"bounds":{"left":0.63331115,"top":0.25339186,"width":0.010472074,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Recipient","depth":11,"bounds":{"left":0.6246675,"top":0.27853152,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Recipient","depth":12,"bounds":{"left":0.63331115,"top":0.2773344,"width":0.019946808,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Amount","depth":11,"bounds":{"left":0.6246675,"top":0.30247405,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Amount","depth":12,"bounds":{"left":0.63331115,"top":0.30127692,"width":0.016788565,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Balance","depth":11,"bounds":{"left":0.6246675,"top":0.3264166,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Balance","depth":12,"bounds":{"left":0.63331115,"top":0.32521948,"width":0.016954787,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Status","depth":11,"bounds":{"left":0.6246675,"top":0.35035914,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status","depth":12,"bounds":{"left":0.63331115,"top":0.349162,"width":0.013796543,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Tags","depth":11,"bounds":{"left":0.6246675,"top":0.37430167,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tags","depth":12,"bounds":{"left":0.63331115,"top":0.37310454,"width":0.010139627,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Actions","depth":11,"bounds":{"left":0.6246675,"top":0.3982442,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":12,"bounds":{"left":0.63331115,"top":0.39704707,"width":0.016123671,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"SOURCE HIGHLIGHT","depth":10,"bounds":{"left":0.6319814,"top":0.43575418,"width":0.043716755,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SOURCE HIGHLIGHT","depth":11,"bounds":{"left":0.6319814,"top":0.43615323,"width":0.043716755,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"None","depth":11,"bounds":{"left":0.6246675,"top":0.46209097,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":11,"bounds":{"left":0.63331115,"top":0.46089387,"width":0.011303191,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Accent stripe","depth":11,"bounds":{"left":0.6246675,"top":0.4828412,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Accent stripe","depth":11,"bounds":{"left":0.63331115,"top":0.48164406,"width":0.028590426,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Row tint","depth":11,"bounds":{"left":0.6246675,"top":0.50359136,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Row tint","depth":11,"bounds":{"left":0.63331115,"top":0.50239426,"width":0.017453458,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"TABLE DENSITY","depth":10,"bounds":{"left":0.6319814,"top":0.54110134,"width":0.033909574,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TABLE DENSITY","depth":11,"bounds":{"left":0.6319814,"top":0.5415004,"width":0.033909574,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Compact","depth":11,"bounds":{"left":0.6246675,"top":0.5674381,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Compact","depth":11,"bounds":{"left":0.63331115,"top":0.566241,"width":0.019448139,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Comfortable","depth":11,"bounds":{"left":0.6246675,"top":0.58818835,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Comfortable","depth":11,"bounds":{"left":0.63331115,"top":0.58699125,"width":0.026595745,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"MOBILE VIEW","depth":10,"bounds":{"left":0.6319814,"top":0.6256983,"width":0.029089095,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MOBILE VIEW","depth":11,"bounds":{"left":0.6319814,"top":0.6260974,"width":0.029089095,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Cards","depth":11,"bounds":{"left":0.6246675,"top":0.6520351,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Cards","depth":11,"bounds":{"left":0.63331115,"top":0.650838,"width":0.012632979,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Table (scroll)","depth":11,"bounds":{"left":0.6246675,"top":0.67278534,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Table (scroll)","depth":11,"bounds":{"left":0.63331115,"top":0.6715882,"width":0.027759308,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-1883337179115875296
|
884347388564744108
|
click
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Close tab
Select: payments - db - Adminer
Select: payments - db - Adminer
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
VIVACOM
VIVACOM
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
VIVACOM
VIVACOM
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Finance Hub
Finance Hub
8
transaction
s
Payments
Payments
Upload CSV
Upload CSV
Refresh
Display settings
Sign out
Filters
Filters
Search...
dd
/
mm
/
yyyy
Calendar
dd
/
mm
/
yyyy
Calendar
DATE
TYPE
RECIPIENT
AMOUNT
BALANCE
STATUS
TAGS
08 May 2026
КАРТОВА ОПЕРАЦИЯ
POL BALICE Lagardere Travel R KR3
Raw data
5.49 EUR
—
Pending
Pending
Send
Send
Skip
Skip
Delete
08 May 2026
КАРТОВА ОПЕРАЦИЯ
BGR SOFIA CBA EKO MARKET
Raw data
5.51 EUR
—
Pending
Pending
Groceries
Send
Send
Skip
Skip
Delete
08 May 2026
КАРТОВА ОПЕРАЦИЯ
BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR
Raw data
67.81 EUR
—
Pending
Pending
Groceries
Send
Send
Skip
Skip
Delete
08 May 2026
—
—
Raw data
9.04 EUR
—
Pending
Pending
Send
Send
Skip
Skip
Delete
08 May 2026
—
—
Raw data
15.46 EUR
—
Pending
Pending
Send
Send
Skip
Skip
Delete
08 May 2026
—
—
Raw data
5.02 EUR
—
Pending
Pending
Send
Send
Skip
Skip
Delete
08 May 2026, 10:00
ATM
DSK ATM, SOFIA, BG
Raw data
200.00 EUR
1050.00 EUR
Pending
Pending
Send
Send
Skip
Skip
Delete
DATE
08 May 2026
08 May 2026
08 May 2026
08 May 2026
08 May 2026
08 May 2026
08 May 2026, 10:00
TYPE
КАРТОВА ОПЕРАЦИЯ
КАРТОВА ОПЕРАЦИЯ
КАРТОВА ОПЕРАЦИЯ
—
—
—
ATM
RECIPIENT
POL BALICE Lagardere Travel R KR3
Raw data
BGR SOFIA CBA EKO MARKET
Raw data
BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR
Raw data
—
Raw data
—
Raw data
—
Raw data
DSK ATM, SOFIA, BG
Raw data
AMOUNT
5.49 EUR
5.51 EUR
67.81 EUR
9.04 EUR
15.46 EUR
5.02 EUR
200.00 EUR
BALANCE
—
—
—
—
—
—
1050.00 EUR
STATUS
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
Pending
TAGS
Groceries
Groceries
Send
Send
Skip
Skip
Delete
Send
Send
Skip
Skip
Delete
Send
Send
Skip
Skip
Delete
Send
Send
Skip
Skip
Delete
Send
Send
Skip
Skip
Delete
Send
Send
Skip
Skip
Delete
Send
Send
Skip
Skip
Delete
Display Settings
Display Settings
LAYOUT
LAYOUT
Full-width
Full-width
COLUMNS
COLUMNS
Date & Time
Date & Time
Source
Source
Type
Type
Recipient
Recipient
Amount
Amount
Balance
Balance
Status
Status
Tags
Tags
Actions
Actions
SOURCE HIGHLIGHT
SOURCE HIGHLIGHT
None
None
Accent stripe
Accent stripe
Row tint
Row tint
TABLE DENSITY
TABLE DENSITY
Compact
Compact
Comfortable
Comfortable
MOBILE VIEW
MOBILE VIEW
Cards
Cards
Table (scroll)
Table (scroll)...
|
12592
|
NULL
|
NULL
|
NULL
|
|
12752
|
562
|
34
|
2026-05-09T09:27:43.520939+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778318863520_m2.jpg...
|
Firefox
|
Claude — Personal
|
True
|
claude.ai/new
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Select: payments - db - Adminer
Select: payments - db - Adminer
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
VIVACOM
VIVACOM
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
VIVACOM
VIVACOM
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Claude Code | Claude Platform
Claude Code | Claude Platform
Claude
Claude
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Home
Close sidebar
New chat
New chat
⇧⌘O
Search
Search
⌘K
Chats
Chats
Projects
Projects
Code
Code
Customize
Customize
Design
Design
More
More
Starred
Starred
Bulgarian citizenship application process for EU residents
Bulgarian citizenship application process for EU residents
Dawarich location tracking project
Dawarich location tracking project
Recents Hide
Recents
Hide
Code diff review
Code diff review
HubSpot rate limit implementation strategy
HubSpot rate limit implementation strategy
Screenpipe retention policy code location
Screenpipe retention policy code location
Viewing retention policy in screenpipe
Viewing retention policy in screenpipe
Clean shot x video recording termination issue
Clean shot x video recording termination issue
HubSpot rate limit handling with executeRequest
HubSpot rate limit handling with executeRequest
Untitled
Untitled
💬 Screen pipe. Is there ability…
💬 Screen pipe. Is there ability…
SMB mount access inconsistency between Finder and iTerm
SMB mount access inconsistency between Finder and iTerm
💬 What is the best switch I can…
💬 What is the best switch I can…
Permission denied on screenpipe volume
Permission denied on screenpipe volume
Screenpipe sync database attachment error
Screenpipe sync database attachment error
Last swimming outing with Dani
Last swimming outing with Dani
Definition of incarcerated
Definition of incarcerated
Chromecast remote volume buttons not working
Chromecast remote volume buttons not working
Salesforce API errors with Organization and FieldDefinition queries
Salesforce API errors with Organization and FieldDefinition queries
Daily activity summary from screenpipe data
Daily activity summary from screenpipe data
MacBook unexpected restarts and kanji screen
MacBook unexpected restarts and kanji screen
Security patch review and testing guidance
Security patch review and testing guidance
Food calorie values reference
Food calorie values reference
Tracking location history from last week
Tracking location history from last week
Screenpipe WAL processing when stopped
Screenpipe WAL processing when stopped
Reviewing recent conversation highlights
Reviewing recent conversation highlights
Mac aliases not recognized
Mac aliases not recognized
Boosteroid still recording despite ignored windows setting
Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
Linux SQLite UI for NAS
Claude API 500 internal server error
Claude API 500 internal server error
Screenpipe query capabilities and usage
Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
eGPU compatibility with Mac mini and Studio
All chats
All chats
Lukas Kovalik, Settings
LK
Lukas Kovalik
Pro plan
Get apps and extensions
Back at it, Lukas
How can I help you today?
Add files, connectors, and more
Model: Opus 4.7 Adaptive
Opus 4.7
Adaptive
Use voice mode
Write
Write
Learn
Learn
Code
Code
Life stuff
Life stuff
Claude’s choice
Claude’s choice
Use incognito...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.080784574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DNS / Nameservers | Hostinger","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DNS / Nameservers | Hostinger","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.053856384,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.040724736,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.03756649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.11469415,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AFFiNE - All In One KnowledgeOS","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.05851064,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All docs · AFFiNE","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.029587766,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Payments Logger","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Payments Logger","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.030086435,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.06898271,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"(25) Quora","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(25) Quora","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.018949468,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Location Logger","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":5,"bounds":{"left":0.013297873,"top":0.4884278,"width":0.028091755,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"bounds":{"left":0.013297873,"top":0.5211492,"width":0.021609042,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"bounds":{"left":0.013297873,"top":0.55387074,"width":0.021609042,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Select: payments - db - Adminer","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select: payments - db - Adminer","depth":5,"bounds":{"left":0.013297873,"top":0.5865922,"width":0.05651596,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":5,"bounds":{"left":0.013297873,"top":0.61931366,"width":0.09059176,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":5,"bounds":{"left":0.013297873,"top":0.6520351,"width":0.113696806,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"bounds":{"left":0.0,"top":0.6735834,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIVACOM","depth":5,"bounds":{"left":0.013297873,"top":0.6847566,"width":0.016788565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":4,"bounds":{"left":0.0,"top":0.70630485,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":5,"bounds":{"left":0.013297873,"top":0.71747804,"width":0.10239362,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"bounds":{"left":0.0,"top":0.7390263,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIVACOM","depth":5,"bounds":{"left":0.013297873,"top":0.7501995,"width":0.016788565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":4,"bounds":{"left":0.0,"top":0.7717478,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":5,"bounds":{"left":0.013297873,"top":0.782921,"width":0.098902926,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code | Claude Platform","depth":4,"bounds":{"left":0.0,"top":0.8044693,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code | Claude Platform","depth":5,"bounds":{"left":0.013297873,"top":0.8156425,"width":0.053357713,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude","depth":4,"bounds":{"left":0.0,"top":0.83719075,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Claude","depth":5,"bounds":{"left":0.013297873,"top":0.84836394,"width":0.012134309,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.10139628,"top":0.8443735,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.87150836,"width":0.108211435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Home","depth":10,"bounds":{"left":0.119015954,"top":0.06464485,"width":0.022606382,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close sidebar","depth":11,"bounds":{"left":0.19597739,"top":0.058260176,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"New chat","depth":12,"bounds":{"left":0.11635638,"top":0.096568234,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New chat","depth":16,"bounds":{"left":0.12832446,"top":0.10215483,"width":0.020777926,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"⇧⌘O","depth":15,"bounds":{"left":0.18982713,"top":0.10335196,"width":0.010804521,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Search","depth":12,"bounds":{"left":0.11635638,"top":0.12290503,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search","depth":16,"bounds":{"left":0.12832446,"top":0.12849163,"width":0.01512633,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"⌘K","depth":15,"bounds":{"left":0.19414894,"top":0.12968874,"width":0.006482713,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chats","depth":13,"bounds":{"left":0.11635638,"top":0.14924182,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chats","depth":17,"bounds":{"left":0.12832446,"top":0.15482841,"width":0.013131649,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":13,"bounds":{"left":0.11635638,"top":0.17557861,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":17,"bounds":{"left":0.12832446,"top":0.1811652,"width":0.018284574,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":13,"bounds":{"left":0.11635638,"top":0.20231445,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":17,"bounds":{"left":0.12832446,"top":0.20790103,"width":0.011801862,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Customize","depth":13,"bounds":{"left":0.11635638,"top":0.22865124,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customize","depth":17,"bounds":{"left":0.12832446,"top":0.23423783,"width":0.023271276,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Design","depth":13,"bounds":{"left":0.11635638,"top":0.25538707,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Design","depth":16,"bounds":{"left":0.12832446,"top":0.26097366,"width":0.01512633,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More","depth":12,"bounds":{"left":0.11635638,"top":0.28172386,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":15,"bounds":{"left":0.12832446,"top":0.28731045,"width":0.011635638,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Starred","depth":13,"bounds":{"left":0.11635638,"top":0.32322428,"width":0.090259306,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Starred","depth":14,"bounds":{"left":0.119015954,"top":0.3236233,"width":0.01412899,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Bulgarian citizenship application process for EU residents","depth":16,"bounds":{"left":0.11635638,"top":0.3423783,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Bulgarian citizenship application process for EU residents","depth":19,"bounds":{"left":0.119015954,"top":0.34796488,"width":0.12533244,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dawarich location tracking project","depth":16,"bounds":{"left":0.11635638,"top":0.36871508,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dawarich location tracking project","depth":19,"bounds":{"left":0.119015954,"top":0.37430167,"width":0.07480053,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recents Hide","depth":13,"bounds":{"left":0.11635638,"top":0.4102155,"width":0.032247342,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Recents","depth":14,"bounds":{"left":0.119015954,"top":0.41061452,"width":0.015458777,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hide","depth":15,"bounds":{"left":0.13713431,"top":0.41061452,"width":0.00880984,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code diff review","depth":16,"bounds":{"left":0.11635638,"top":0.4293695,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code diff review","depth":19,"bounds":{"left":0.119015954,"top":0.4349561,"width":0.036402926,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"HubSpot rate limit implementation strategy","depth":16,"bounds":{"left":0.11635638,"top":0.4557063,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"HubSpot rate limit implementation strategy","depth":19,"bounds":{"left":0.119015954,"top":0.4612929,"width":0.09424867,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Screenpipe retention policy code location","depth":16,"bounds":{"left":0.11635638,"top":0.4820431,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe retention policy code location","depth":19,"bounds":{"left":0.119015954,"top":0.48762968,"width":0.09075798,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Viewing retention policy in screenpipe","depth":16,"bounds":{"left":0.11635638,"top":0.5083799,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Viewing retention policy in screenpipe","depth":19,"bounds":{"left":0.119015954,"top":0.5139665,"width":0.08361037,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Clean shot x video recording termination issue","depth":16,"bounds":{"left":0.11635638,"top":0.53471667,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Clean shot x video recording termination issue","depth":19,"bounds":{"left":0.119015954,"top":0.5403033,"width":0.101230055,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"HubSpot rate limit handling with executeRequest","depth":16,"bounds":{"left":0.11635638,"top":0.56105345,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"HubSpot rate limit handling with executeRequest","depth":19,"bounds":{"left":0.119015954,"top":0.5666401,"width":0.10688165,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Untitled","depth":16,"bounds":{"left":0.11635638,"top":0.58739024,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Untitled","depth":19,"bounds":{"left":0.119015954,"top":0.59297687,"width":0.017952127,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"💬 Screen pipe. Is there ability…","depth":16,"bounds":{"left":0.11635638,"top":0.61372703,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"💬 Screen pipe. Is there ability…","depth":19,"bounds":{"left":0.119015954,"top":0.61931366,"width":0.06931516,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SMB mount access inconsistency between Finder and iTerm","depth":16,"bounds":{"left":0.11635638,"top":0.6400638,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SMB mount access inconsistency between Finder and iTerm","depth":19,"bounds":{"left":0.119015954,"top":0.64565045,"width":0.13031915,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"💬 What is the best switch I can…","depth":16,"bounds":{"left":0.11635638,"top":0.6664006,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"💬 What is the best switch I can…","depth":19,"bounds":{"left":0.119015954,"top":0.67198724,"width":0.07263963,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Permission denied on screenpipe volume","depth":16,"bounds":{"left":0.11635638,"top":0.6927374,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Permission denied on screenpipe volume","depth":19,"bounds":{"left":0.119015954,"top":0.698324,"width":0.08892952,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Screenpipe sync database attachment error","depth":16,"bounds":{"left":0.11635638,"top":0.71907425,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe sync database attachment error","depth":19,"bounds":{"left":0.119015954,"top":0.7246608,"width":0.09607713,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Last swimming outing with Dani","depth":16,"bounds":{"left":0.11635638,"top":0.74541104,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Last swimming outing with Dani","depth":19,"bounds":{"left":0.119015954,"top":0.7509976,"width":0.06898271,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Definition of incarcerated","depth":16,"bounds":{"left":0.11635638,"top":0.7717478,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Definition of incarcerated","depth":19,"bounds":{"left":0.119015954,"top":0.7773344,"width":0.056349736,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chromecast remote volume buttons not working","depth":16,"bounds":{"left":0.11635638,"top":0.7980846,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chromecast remote volume buttons not working","depth":19,"bounds":{"left":0.119015954,"top":0.8036712,"width":0.10571808,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Salesforce API errors with Organization and FieldDefinition queries","depth":16,"bounds":{"left":0.11635638,"top":0.8244214,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Salesforce API errors with Organization and FieldDefinition queries","depth":19,"bounds":{"left":0.119015954,"top":0.830008,"width":0.14577793,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Daily activity summary from screenpipe data","depth":16,"bounds":{"left":0.11635638,"top":0.8507582,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Daily activity summary from screenpipe data","depth":19,"bounds":{"left":0.119015954,"top":0.85634476,"width":0.09773936,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"MacBook unexpected restarts and kanji screen","depth":16,"bounds":{"left":0.11635638,"top":0.877095,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"MacBook unexpected restarts and kanji screen","depth":19,"bounds":{"left":0.119015954,"top":0.88268155,"width":0.102726065,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security patch review and testing guidance","depth":16,"bounds":{"left":0.11635638,"top":0.9034318,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security patch review and testing guidance","depth":19,"bounds":{"left":0.119015954,"top":0.90901834,"width":0.09424867,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Food calorie values reference","depth":16,"bounds":{"left":0.11635638,"top":0.92976856,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Food calorie values reference","depth":19,"bounds":{"left":0.119015954,"top":0.9353551,"width":0.06416223,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Tracking location history from last week","depth":16,"bounds":{"left":0.11635638,"top":0.95610535,"width":0.090259306,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tracking location history from last week","depth":19,"bounds":{"left":0.119015954,"top":0.9616919,"width":0.08643617,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Screenpipe WAL processing when stopped","depth":16,"bounds":{"left":0.11635638,"top":0.98244214,"width":0.090259306,"height":0.01755786},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe WAL processing when stopped","depth":19,"bounds":{"left":0.119015954,"top":0.9880287,"width":0.09375,"height":0.011971295},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reviewing recent conversation highlights","depth":16,"bounds":{"left":0.11635638,"top":1.0,"width":0.090259306,"height":-0.00877893},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reviewing recent conversation highlights","depth":19,"bounds":{"left":0.119015954,"top":1.0,"width":0.08976064,"height":-0.014365554},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Mac aliases not recognized","depth":16,"bounds":{"left":0.11635638,"top":1.0,"width":0.090259306,"height":-0.03511572},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Mac aliases not recognized","depth":19,"bounds":{"left":0.119015954,"top":1.0,"width":0.058843084,"height":-0.040702343},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Boosteroid still recording despite ignored windows setting","depth":16,"bounds":{"left":0.11635638,"top":1.0,"width":0.090259306,"height":-0.061452508},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Boosteroid still recording despite ignored windows setting","depth":19,"bounds":{"left":0.119015954,"top":1.0,"width":0.12699468,"height":-0.06703913},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Missing JavaScript promise in authorization response","depth":16,"bounds":{"left":0.11635638,"top":1.0,"width":0.090259306,"height":-0.0877893},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Missing JavaScript promise in authorization response","depth":19,"bounds":{"left":0.119015954,"top":1.0,"width":0.11619016,"height":-0.09337592},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Linux SQLite UI for NAS","depth":16,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Linux SQLite UI for NAS","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Claude API 500 internal server error","depth":16,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude API 500 internal server error","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Screenpipe query capabilities and usage","depth":16,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe query capabilities and usage","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"eGPU compatibility with Mac mini and Studio","depth":16,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"eGPU compatibility with Mac mini and Studio","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All chats","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All chats","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Lukas Kovalik, Settings","depth":12,"bounds":{"left":0.113696806,"top":0.9489226,"width":0.095578454,"height":0.051077414},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"LK","depth":13,"bounds":{"left":0.12167553,"top":0.96648043,"width":0.006981383,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":14,"bounds":{"left":0.13530585,"top":0.96089387,"width":0.029920213,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pro plan","depth":14,"bounds":{"left":0.13530585,"top":0.9764565,"width":0.015292553,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Get apps and extensions","depth":14,"bounds":{"left":0.18600398,"top":0.9616919,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Back at it, Lukas","depth":12,"bounds":{"left":0.42170876,"top":0.2932961,"width":0.094082445,"height":0.04030327},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"","depth":13,"bounds":{"left":0.3567154,"top":0.3794892,"width":0.21210106,"height":0.017956903},"on_screen":true,"value":"","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How can I help you today?","depth":14,"bounds":{"left":0.3567154,"top":0.3794892,"width":0.06466091,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add files, connectors, and more","depth":13,"bounds":{"left":0.35538563,"top":0.4225858,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Model: Opus 4.7 Adaptive","depth":14,"bounds":{"left":0.5031583,"top":0.4225858,"width":0.05236037,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Opus 4.7","depth":16,"bounds":{"left":0.5064827,"top":0.42817238,"width":0.019281914,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Adaptive","depth":16,"bounds":{"left":0.5277593,"top":0.42817238,"width":0.019780586,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Use voice mode","depth":13,"bounds":{"left":0.5581782,"top":0.4225858,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Write","depth":12,"bounds":{"left":0.37350398,"top":0.47326416,"width":0.027094414,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Write","depth":14,"bounds":{"left":0.3849734,"top":0.47885075,"width":0.012134309,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Learn","depth":12,"bounds":{"left":0.40325797,"top":0.47326416,"width":0.027426861,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Learn","depth":14,"bounds":{"left":0.4147274,"top":0.47885075,"width":0.012466756,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Code","depth":12,"bounds":{"left":0.43334442,"top":0.47326416,"width":0.026761968,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"bounds":{"left":0.44481382,"top":0.47885075,"width":0.011801862,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Life stuff","depth":12,"bounds":{"left":0.46276596,"top":0.47326416,"width":0.03507314,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Life stuff","depth":14,"bounds":{"left":0.4742354,"top":0.47885075,"width":0.020113032,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude’s choice","depth":12,"bounds":{"left":0.50049865,"top":0.47326416,"width":0.04886968,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude’s choice","depth":14,"bounds":{"left":0.5119681,"top":0.47885075,"width":0.033909574,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Use incognito","depth":11,"bounds":{"left":0.6988032,"top":0.059856344,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-7614148789937310042
|
-5024446840469779426
|
click
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Select: payments - db - Adminer
Select: payments - db - Adminer
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
VIVACOM
VIVACOM
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
VIVACOM
VIVACOM
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Claude Code | Claude Platform
Claude Code | Claude Platform
Claude
Claude
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Home
Close sidebar
New chat
New chat
⇧⌘O
Search
Search
⌘K
Chats
Chats
Projects
Projects
Code
Code
Customize
Customize
Design
Design
More
More
Starred
Starred
Bulgarian citizenship application process for EU residents
Bulgarian citizenship application process for EU residents
Dawarich location tracking project
Dawarich location tracking project
Recents Hide
Recents
Hide
Code diff review
Code diff review
HubSpot rate limit implementation strategy
HubSpot rate limit implementation strategy
Screenpipe retention policy code location
Screenpipe retention policy code location
Viewing retention policy in screenpipe
Viewing retention policy in screenpipe
Clean shot x video recording termination issue
Clean shot x video recording termination issue
HubSpot rate limit handling with executeRequest
HubSpot rate limit handling with executeRequest
Untitled
Untitled
💬 Screen pipe. Is there ability…
💬 Screen pipe. Is there ability…
SMB mount access inconsistency between Finder and iTerm
SMB mount access inconsistency between Finder and iTerm
💬 What is the best switch I can…
💬 What is the best switch I can…
Permission denied on screenpipe volume
Permission denied on screenpipe volume
Screenpipe sync database attachment error
Screenpipe sync database attachment error
Last swimming outing with Dani
Last swimming outing with Dani
Definition of incarcerated
Definition of incarcerated
Chromecast remote volume buttons not working
Chromecast remote volume buttons not working
Salesforce API errors with Organization and FieldDefinition queries
Salesforce API errors with Organization and FieldDefinition queries
Daily activity summary from screenpipe data
Daily activity summary from screenpipe data
MacBook unexpected restarts and kanji screen
MacBook unexpected restarts and kanji screen
Security patch review and testing guidance
Security patch review and testing guidance
Food calorie values reference
Food calorie values reference
Tracking location history from last week
Tracking location history from last week
Screenpipe WAL processing when stopped
Screenpipe WAL processing when stopped
Reviewing recent conversation highlights
Reviewing recent conversation highlights
Mac aliases not recognized
Mac aliases not recognized
Boosteroid still recording despite ignored windows setting
Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
Linux SQLite UI for NAS
Claude API 500 internal server error
Claude API 500 internal server error
Screenpipe query capabilities and usage
Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
eGPU compatibility with Mac mini and Studio
All chats
All chats
Lukas Kovalik, Settings
LK
Lukas Kovalik
Pro plan
Get apps and extensions
Back at it, Lukas
How can I help you today?
Add files, connectors, and more
Model: Opus 4.7 Adaptive
Opus 4.7
Adaptive
Use voice mode
Write
Write
Learn
Learn
Code
Code
Life stuff
Life stuff
Claude’s choice
Claude’s choice
Use incognito...
|
12751
|
NULL
|
NULL
|
NULL
|
|
13229
|
586
|
34
|
2026-05-09T10:33:09.420776+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778322789420_m2.jpg...
|
Code
|
Design new payment-logge… — finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
scripts
reimport_sms.sh
.env
.env.example
.gitignore
docker-compose.yml
sms_export.json
payments-logger
.claude
auth
backend
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
Bash tool output (a4j52f), preview, Editor Group 1
const ingestLimiter = rateLimit({
windowMs: 60 * 1000,
max: 200,
standardHeaders: true,
legacyHeaders: false,
message: { error: 'Too many requests, slow down' },
});
app.use('/api/payments/ingest', ingestLimiter);
// Authentik header auth (skips /api/health and /api/payments/ingest)
app.use(authentikMiddleware);
app.get('/api/health', (_req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
});
const ingestLimiter = rateLimit({
windowMs: 60 * 1000,
max: 200,
standardHeaders: true,
legacyHeaders: false,
message: { error: 'Too many requests, slow down' },
});
app.use('/api/payments/ingest', ingestLimiter);
// Authentik header auth (skips /api/health and /api/payments/ingest)
app.use(authentikMiddleware);
app.get('/api/health', (_req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
});
Design new payment-logge…, Editor Group 2
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
expanded
Design new payment-logger and dsk-uploader hybrid app
Session history
New session
Message actions
payments.js
payments.js
ets create a new app that should be combination of payment-logger and dsk-uploader. It should have authorization via authentik (auth folder). All three folders (payment-logger, dsk-uploader and auth) are just refference these will be removed later. Auth project is separated it lives on its own. First reveiw them and see how these should be combined. It will be whole new app (also the folder name). Think very carefully of whatr these two apps do and how cold they be combined. THerer should be common db and uploader should store data the same way the /ingest does. It should be properly marked in UI if it is upload or ingest or both. FIrst think of tech stack and plan carefully.
Thinking
Thinking
I'll explore all three reference projects in parallel to understand their structure before planning.
Agent:
Explore payment-logger app structure and functionality
IN
Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How data flows (ingest, storage, retrieval)
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, and how data is ingested. Be thorough on the /ingest endpoint specifically.
Agent:
Explore dsk-uploader app structure and functionality
IN
Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How file uploads work - what files, what format, how parsed
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, how file upload parsing works, and what data is extracted from uploads. Be very thorough about the data model and what fields are stored.
Agent:
Explore auth folder and authentik integration
IN
Explore the /volume2/docker/finance/auth directory thoroughly. I need to understand:
1. What auth system is being used (Authentik)
2. How authentication/authorization is implemented - OAuth2, OIDC, session tokens, JWT?
3. Middleware - how is auth enforced on routes?
4. Any frontend auth flow - login redirect, token handling, protected routes
5. Environment variables related to auth
6. Docker/deployment setup for the auth service itself
7. Any example of how other apps integrate with this auth
Report with: directory structure, auth flow description, middleware code, environment variable names, and integration patterns. This is a reference for building auth into a new combined app.
Message actions
payments.js
payments.js
continue
Thinking
Thinking
Launching parallel exploration of all three reference projects.
Agent:
Explore payment-logger app structure
IN
Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:
1. Full directory structure (tree)
2. Tech stack (frontend framework, backend framework, database, etc.)
3. What the app does - its core functionality
4. How data is ingested (look at /ingest route especially)
5. Database schema (what tables/collections exist)
6. API routes and their purposes
7. Frontend pages and components
8. Docker setup
9. Any auth/session handling
Please read key files: package.json files, main entry points, route files, database schema files, docker-compose.yml, and any frontend components. Be thorough - I need a complete picture to plan a new combined app.
Agent:
Explore dsk-uploader app structure
IN
Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:
1. Full directory structure (tree)
2. Tech stack (frontend framework, backend framework, database, etc.)
3. What the app does - its core functionality
4. How file uploads work (what format, what processing happens)
5. Database schema (what tables/collections exist)
6. API routes and their purposes
7. Frontend pages and components
8. Docker setup
9. Any auth/session handling
Please read key files: package.json files, main entry points, route files, database schema files, docker-compose.yml, and any frontend components. Be thorough - I need a complete picture to plan a new combined app.
Agent:
Explore auth project structure
IN
Explore the /volume2/docker/finance/auth directory thoroughly. I need to understand:
1. Full directory structure (tree)
2. What authentication system is used (authentik integration details)
3. How OAuth/OIDC flow works
4. Any middleware or helper functions for protecting routes
5. Session management approach
6. How frontend handles auth state
7. Any example of how other apps integrate with this auth system
8. Docker setup and environment variables
Please read all files carefully - this auth system will be integrated into a new combined app. I need to understand exactly how to use it.
Thinking
Thinking
Now I have a complete picture of all three. Let me design the plan.
Agent:
Design combined app architecture
IN
Design a detailed implementation plan for a new combined web app that merges two existing applications. Here is full context:
---
## App 1: payments-logger (Node.js)
- **Purpose**: Ingest Bulgarian bank SMS → parse → store in PostgreSQL → review/tag/notify in React UI
- **Stack**: Node.js 20 + Express + Prisma 5 + PostgreSQL 16 + React 18 + Vite + Tailwind CSS
- **Auth**: Custom JWT (bcryptjs + jose), tokens in localStorage
- **Ingest**: POST /api/payments/ingest (public) — SMS text OR structured JSON (Apple Wallet)
- **Schema** (PostgreSQL via Prisma):
- `payments` table: id, raw_message, date, type (POS/ATM/INTERNET/ECOM/P2P/WALLET), card, recipient, amount, balance, status (UNPROCESSED/SENT/SKIPPED), notifyPhone, notifiedAt, created_at, updated_at
- `tags` table: id, name, color — M2M with payments via `_PaymentToTag`
- `users` table: id, username, hashed_password (this will be REMOVED)
- **UI**: Single-page React app — PaymentTable (sortable, filterable, taggable), FilterBar, status actions (send/skip), notification system
- **Parser** (backend/src/parser.js): Regex parser for Bulgarian DSK Bank SMS, extracts date/time (DD/MM/YYYY HH:MM), card mask, transaction type, recipient, amount, balance
## App 2: dsk-uploader (Python/Flask)
- **Purpose**: Upload DSK bank CSV exports → parse/normalize → upload to Notion database
- **Stack**: Python 3.11 + Flask + Pandas + Custom Notion SDK + Bootstrap 5
- **Auth**: None (open)
- **CSV format** (DSK Bank Bulgarian format, columns):
- `Дата` (date, DD.MM.YYYY)
- `Вид на трансакцията` (transaction type, Bulgarian)
- `Основание` (reason/description — contains card number regex: `^\d{6}x{6}\d{4}$`)
- `Дебит BGN` (debit amount, may be empty)
- `Кредит BGN` (credit amount, may be empty)
- `Наредител/Получател` (orderer/recipient name)
- `Номер сметка на наредителя / получателя` (account number)
- **Processing**: merge multiple CSVs, normalize dates, extract card numbers from reason via regex, auto-generate tags (keyword heuristics: ЗАПЛАТА→Salary, NETFLIX→Subscriptions, etc.), filter internal transfers
- **Output**: Notion database pages (this will be REPLACED with local PostgreSQL)
## App 3: auth (Authentik)
- **Mode**: Proxy mode via NPM (forward auth)
- **How it works**: NPM intercepts all requests, calls Authentik outpost's auth endpoint. On success, NPM injects headers into proxied request:
- `X-authentik-username`
- `X-authentik-email`
- `X-authentik-groups`
- **No code integration needed** in the app itself — just trust these headers from NPM
- **Logout**: Redirect user to `/outpost.goauthentik.io/sign_out`
---
## What the New Combined App Must Do
1. **Single PostgreSQL database** for all transactions
2. **SMS Ingest** (public endpoint) — same as payments-logger /ingest, source=INGEST
3. **CSV Upload** (authenticated) — parse DSK CSV files, store transactions with source=UPLOAD into the same DB schema
4. **Unified UI** — show all payments in one table regardless of source
5. **Source indicator** in UI — badge showing "INGEST", "UPLOAD", or "BOTH" (if duplicate detection added)
6. **Source filter** in FilterBar — filter by All/Ingest/Upload
7. **Authentik auth** — remove custom JWT entirely; trust X-authentik-* headers from NPM
8. **All existing payments-logger features**: tagging, send notification, skip, status tracking, filters, sorting, pagination
9. **Remove Notion dependency entirely** — all data stays in local PostgreSQL
---
## Technical Constraints
- Keep Node.js backend (not Python) — extend payments-logger's stack
- CSV parsing: use `csv-parse` npm package (handles encoding, streaming)
- File upload: use `multer` npm middleware
- Auth middleware: read X-authentik-username header, 401 if missing (but /api/payments/ingest stays public)
- Add `source` enum field (INGEST/UPLOAD) to payments schema
- Add `currency` field (EUR for SMS ingest, BGN for CSV uploads) — or just store as-is
- Remove `users` table from schema
---
## Please Design
1. Complete folder structure for the new app (suggest name: "finance-hub" or similar — note this is a placeholder, user will confirm)
2. Prisma schema with new fields (`source`, `currency`)
3. All backend API routes
4. CSV parser design in Node.js (port of the Python logic)
5. Authentik auth middleware
6. Frontend component structure (React) — what's reused from payments-logger, what's new
7. Docker Compose setup
8. Environment variables needed
9. Step-by-step implementation order
10. Verification checklist
Be specific about file paths and code structure. This will be used to write actual implementation code.
Thinking
Thinking
Good plan. Let me ask the one thing I need before writing the final plan.
AskUserQuestion
OUT
User has answered your questions: "What should the new combined app be called? This will be the folder name under /volume2/docker/finance/ and the app branding."="finance-hub". You can now continue with the user's answers in mind.
Thinking
Thinking
Writing the final plan now.
Thinking
Thinking
Write
ets-create-a-new-generic-sun.md
ets-create-a-new-generic-sun.md
326 lines
# finance-hub — Implementation Plan
## Context
Two separate finance apps exist as references and will be retired:
- **payments-logger** (Node.js/React): Ingests Bulgarian bank SMS notifications, stores payments in PostgreSQL, provides a review/tag/notify UI.
- **dsk-uploader** (Python/Flask): Uploads DSK bank CSV exports, parses them, sends to Notion.
The new app **finance-hub** (`/volume2/docker/finance/finance-hub/`) replaces both with a single unified system: all transactions (SMS-ingested and CSV-uploaded) land in one PostgreSQL database and one React UI. Authentication is delegated entirely to Authentik (proxy mode via NPM — no custom JWT).
---
## Tech Stack
| Layer | Choice | Rationale |
|-------|--------|-----------|
| Backend | Node.js 20 + Express + Prisma 5 | Extends payments-logger; no Python needed |
| CSV parsing | `csv-parse` + `iconv-lite` | Handles Bulgarian cp1251 encoding, RFC4180 quoted fields |
| File upload | `multer` (memory storage) | Bank CSVs are small (<500 KB), no disk cleanup needed |
| Database | PostgreSQL 16 | Same as payments-logger |
| Frontend | React 18 + Vite + Tailwind CSS + Lucide React | Same as payments-logger |
| Auth | Authentik proxy via NPM headers | No custom JWT; removes users table entirely |
| Container | Docker Compose | Same pattern as both reference apps |
**Removed vs payments-logger:** `bcryptjs`, `jose`, `users` table, login form, JWT storage.
**Removed vs dsk-uploader:** Python/Flask, Pandas, Notion SDK, all Notion references.
**Added:** `csv-parse`, `iconv-lite`, `multer`, `source` + `currency` fields, `UploadPanel` component.
---
## Folder Structure
```
/volume2/docker/finance/finance-hub/
├── docker-compose.yml
├── .env
├── .env.example
├── .gitignore
├── backend/
│ ├── Dockerfile
│ ├── package.json
│ ├── prisma/
│ │ ├── schema.prisma
│ │ └── migrations/
│ │ ├── migration_lock.toml
│ │ └── 20260508_init/
│ │ └── migration.sql
│ └── src/
│ ├── index.js ← entry point (Authentik middleware wired here)
│ ├── auth.js ← Authentik header middleware (replaces JWT auth)
│ ├── parser.js ← SMS parser (copy verbatim from payments-logger)
│ ├── csvParser.js ← NEW: DSK CSV parser (port of Python dskuploader.py)
│ └── routes/
│ ├── payments.js ← existing routes + source/currency additions
│ └── upload.js ← NEW: POST /api/upload/csv
└── frontend/
├── Dockerfile
├── package.json
├── vite.config.js
├── tailwind.config.js
├── postcss.config.js
├── index.html
└── src/
├── main.jsx ← remove AuthProvider wrapper
├── index.css
├── App.jsx ← remove auth state, add Upload tab toggle
└── components/
├── FilterBar.jsx ← add source filter select
├── PaymentTable.jsx ← add Source badge column + currency display
├── PaymentCard.jsx ← minor source badge addition
├── PaymentList.jsx ← unchanged
└── UploadPanel.jsx ← NEW: drag-and-drop CSV upload UI
```
---
## Database Schema (Prisma)
File: `backend/prisma/schema.prisma`
```prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Payment {
id Int @id @default(autoincrement())
rawMessage String @map("raw_message")
date DateTime?
type String?
card String?
recipient String?
amount Float?
currency String? @default("EUR")
balance Float?
source Source @default(INGEST)
status Status @default(UNPROCESSED)
tags Tag[]
notifiedAt DateTime? @map("notified_at")
notifyPhone String? @map("notify_phone")
debitBgn Float? @map("debit_bgn")
creditBgn Float? @map("credit_bgn")
transactionType String? @map("transaction_type")
payerAccount String? @map("payer_account")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("payments")
}
model Tag {
id Int @id @default(autoincrement())
name String @unique
color String @default("#6b7280")
payments Payment[]
@@map("tags")
}
enum Status { UNPROCESSED SENT SKIPPED }
enum Source { INGEST UPLOAD }
```
**Key decisions:**
- No `User` model — Authentik owns identity.
- `currency`: `EUR` for SMS ingest, `BGN` for CSV uploads.
- `debitBgn`, `creditBgn`, `transactionType`, `payerAccount`: nullable CSV-only columns; INGEST rows store nulls. Avoids a union query for the unified list view.
- `balance` is always null for CSV rows (DSK export does not include running balance).
- Fresh consolidated migration — no data migration from reference apps required.
---
## API Routes
| Method | Path | Auth | Description |
|--------|------|------|-------------|
| GET | /api/health | public | Health check |
| POST | /api/payments/ingest | public | SMS or structured ingest (source=INGEST) |
| GET | /api/payments | required | List with filters/sort/pagination (+ source filter) |
| GET | /api/payments/meta/tags | required | All tags |
| GET | /api/payments/meta/filters | required | Filter options incl. `sources` array |
| GET | /api/payments/:id | required | Single payment |
| PATCH | /api/payments/:id | required | Update status |
| DELETE | /api/payments/:id | required | Delete |
| POST | /api/payments/:id/send | required | Send notification |
| POST | /api/payments/:id/skip | required | Skip |
| POST | /api/payments/:id/tags | required | Add/upsert tag |
| DELETE | /api/payments/:id/tags/:tagId | required | Remove tag |
| POST | /api/upload/csv | required | DSK CSV file upload (source=UPLOAD) |
---
## Key Implementation Details
### auth.js (replaces entire old auth module)
```js
const PUBLIC_PATHS = new Set(['/api/health', '/api/payments/ingest']);
function authentikMiddleware(req, res, next) {
if (PUBLIC_PATHS.has(req.path)) return next();
const username = req.headers['x-authentik-username'];
if (!username) return res.status(401).json({ error: 'Unauthorized' });
req.user = {
username,
email: req.headers['x-authentik-email'] || null,
groups: (req.headers['x-authentik-groups'] || '').split(',').map(g => g.trim()).filter(Boolean),
};
next();
}
module.exports = { authentikMiddleware };
```
### csvParser.js (port of dskuploader.py)
- `iconv-lite` decodes buffer as cp1251 (DSK Bank export encoding), falls back to UTF-8
- `csv-parse` parses the decoded text with `columns: true`
- Columns: `Дата`, `Вид на трансакцията`, `Основание`, `Дебит BGN`, `Кредит BGN`, `Наредител/Получател`, `Номер сметка на наредителя / получателя`
- Card extraction: regex `/^\d{6}x{6}\d{4}$/` on first token of `Основание`
- Skips rows where `Вид на трансакцията === 'ТРАНСФЕР СОБСТВЕНИ СМЕТКИ'`
- Auto-tags via keyword rules (ЗАПЛАТА→Salary, LIDL→Groceries, NETFLIX→Subscriptions, etc.) — same logic as Python `generate_tags()`
- Returns `{ rows: PaymentData[], skipped: number, errors: string[] }`
### payments.js changes from payments-logger
1. Add `source: 'INGEST'` and `currency` to the `/ingest` create call
2. Add `source` to the `GET /` where clause filter
3. Add `sources` to `meta/filters` response
4. Currency-aware amount formatting in notification message
5. Remove all JWT/auth references (no `/auth/register`, `/auth/login`)
### upload.js (new)
- `multer` memory storage, max 10 files × 10 MB
- Calls `parseDskCsv(buffer)` per file
- Upserts tags via `prisma.tag.upsert` then connects
- Returns `{ imported, skipped, errors, payments[] }`
### Frontend changes
- **Delete**: `auth.js`, `AuthProvider.jsx`
- **main.jsx**: Remove `<AuthProvider>` wrapper
- **App.jsx**: Replace `authFetch` with plain `fetch` (Authentik session cookie travels automatically); logout → `window.location.href = '/outpost.goauthentik.io/sign_out'`; add "Payments" / "Upload CSV" tab toggle
- **FilterBar.jsx**: Add source `<select>` (All / SMS Ingest / CSV Upload); widen grid to 5 cols
- **PaymentTable.jsx**: Add `Source` column with `SMS` (indigo) / `CSV` (emerald) badge; show `${amount} ${currency}` in amount cell
- **UploadPanel.jsx** (new): Drag-and-drop zone + file list + import button + result summary with error accordion; calls `POST /api/upload/csv` with `FormData`
---
## Docker Compose
```yaml
services:
db:
image: postgres:16-alpine
environment: { POSTGRES_USER: finance, POSTGRES_PASSWORD: [PASSWORD] POSTGRES_DB: finance_hub }
volumes: [pgdata:/var/lib/postgresql/data]
healthcheck: { test: pg_isready -U finance -d finance_hub, interval: 5s }
backend:
build: ./backend
environment:
DATABASE_URL: [CONNECTION_STRING]
PORT: "3001"
NOTIFIER_URL: ${NOTIFIER_URL}
NOTIFIER_CHANNEL: ${NOTIFIER_CHANNEL:-viber}
NOTIFY_DEFAULT_PHONE: ${NOTIFY_DEFAULT_PHONE}
TZ: ${TZ:-Europe/Sofia}
ports: ["${BACKEND_PORT:-3001}:3001"]
depends_on: { db: { condition: service_healthy } }
frontend:
build: ./frontend
ports: ["${FRONTEND_PORT:-5175}:5173"]
depends_on: [backend]
volumes: { pgdata: }
```
**NPM setup:** Frontend port proxied through Authentik forward auth. Backend port exposed separately (unprotected) so the public `/api/payments/ingest` remains reachable by iOS Shortcuts / SMS gateways without login.
---
## Environment Variables (.env)
```bash
[ENV_SECRET]
NOTIFIER_URL=[URL_WITH_CREDENTIALS] @default(autoincrement())
rawMessage String @map("raw_message")
date DateTime?
type String?
card String?
recipient String?
amount Float?
currency String? @default("EUR")
balance Float?
source Source @default(INGEST)
status Status @default(UNPROCESSED)
tags Tag[]
notifiedAt DateTime? @map("notified_at")
notifyPhone String? @map("notify_phone")
debitBgn Float? @map("debit_bgn")
creditBgn Float? @map("credit_bgn")
transactionType String? @map("transaction_type")
payerAccount String? @map("payer_account")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("payments")
}
model Tag {
id Int @id @default(autoincrement())
name String @unique
color String @default("#6b7280")
payments Payment[]
@@map("tags")
}
enum Status {
UNPROCESSED
SENT
SKIPPED
}
enum Source {
INGEST
UPLOAD
}
Write
migration.sql
migration.sql
55 lines
-- CreateEnum
CREATE TYPE "Status" AS ENUM ('UNPROCESSED', 'SENT', 'SKIPPED');
CREATE TYPE "Source" AS ENUM ('INGEST', 'UPLOAD');
-- CreateTable
CREATE TABLE "payments" (
"id" SERIAL PRIMARY KEY,
"raw_message" TEXT NOT NULL,
"date" TIMESTAMP(3),
"type" TEXT,
"card" TEXT,
"recipient" TEXT,
"amount" DOUBLE PRECISION,
"currency" TEXT DEFAULT 'EUR',
"balance" DOUBLE PRECISION,
"source" "Source" NOT NULL DEFAULT 'INGEST',
"status" "Status" NOT NULL DEFAULT 'UNPROCESSED',
"notified_at" TIMESTAMP(3),
"notify_phone" TEXT,
"debit_bgn" DOUBLE PRECISION,
"credit_bgn" DOUBLE PRECISION,
"transaction_type" TEXT,
"payer_account" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- CreateTable
CREATE TABLE "tags" (
"id" SERIAL PRIMARY KEY,
"name" TEXT NOT NULL,
"color" TEXT NOT NULL DEFAULT '#6b7280'
);
-- CreateUniqueIndex
CREATE UNIQUE INDEX "tags_name_key" ON "tags"("name");
-- CreateTable (M2M join)
CREATE TABLE "_PaymentToTag" (
"A" INTEGER NOT NULL,
"B" INTEGER NOT NULL,
CONSTRAINT "_PaymentToTag_AB_pkey" PRIMARY KEY ("A", "B")
);
CREATE INDEX "_PaymentToTag_B_index" ON "_PaymentToTag"("B");
-- AddForeignKey
ALTER TABLE "_PaymentToTag"
ADD CONSTRAINT "_PaymentToTag_A_fkey"
FOREIGN KEY ("A") REFERENCES "payments"("id") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "_PaymentToTag"
ADD CONSTRAINT "_PaymentToTag_B_fkey"
FOREIGN KEY ("B") REFERENCES "tags"("id") ON DELETE CASCADE ON UPDATE CASCADE;
Write
migration_lock.toml
migration_lock.toml
4 lines
# Please do not edit this file manually
# It should be added in your version-control system (e.g., Git)
provider = "postgresql"
Update Todos
Create folder structure and root config files
Write backend Prisma schema and migration
Write backend package.json and Dockerfile
Write backend src files (auth, parser, csvParser, index)
Write backend routes (payments.js, upload.js)
Write frontend config files
Write frontend React components
Build and verify with docker compose
Write
package.json
package.json
26 lines
{
"name": "finance-hub-backend",
"version": "1.0.0",
"main": "src/index.js",
"scripts": {
"start": "node src/index.js",
"dev": "nodemon src/index.js",
"prisma:generate": "prisma generate",
"prisma:migrate": "prisma migrate deploy"
},
"dependencies": {
"@prisma/client": "^5.22.0",
"cors": "^2.8.5",
"csv-parse": "^5.5.6",
"express": "^4.21.1",
"express-rate-limit": "^7.4.0",
"iconv-lite": "^0.6.3",
"morgan": "^1.10.0",
"multer": "^1.4.5-lts.1"
},
"devDependencies": {
"nodemon": "^3.1.7",
"prisma": "^5.22.0"
}
}
Write
Dockerfile
Dockerfile
18 lines
FROM node:20-alpine
RUN apk add --no-cache openssl
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm install
COPY prisma ./prisma
RUN npx prisma generate
COPY src ./src
EXPOSE 3001
CMD ["sh", "-c", "npx prisma migrate deploy && node src/index.js"]
Update Todos
Create folder structure and root config files
Write backend Prisma schema and migration
Write backend package.json and Dockerfile
Write backend src files (auth, parser, csvParser, index)
Write backend routes (payments.js, upload.js)
Write frontend config files
Write frontend React components
Build and verify with docker compose
Write
auth.js
auth.js
27 lines
const PUBLIC_PATHS = new Set([
'/api/health',
'/api/payments/ingest',
]);
function authentikMiddleware(req, res, next) {
if (PUBLIC_PATHS.has(req.path)) return next();
const username = req.headers['x-authentik-username'];
if (!username) {
return res.status(401).json({ error: 'Unauthorized — missing Authentik session' });
}
req.user = {
username,
email: req.headers['x-authentik-email'] || null,
groups: (req.headers['x-authentik-groups'] || '')
.split(',')
.map(g => g.trim())
.filter(Boolean),
};
next();
}
module.exports = { authentikMiddleware };
Write...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.039228722,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.039228722,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":17,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.036901597,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.02825798,"top":0.096568234,"width":0.0066489363,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.026928192,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.024268618,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.13168396,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.027593086,"top":0.13168396,"width":0.022938829,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"bounds":{"left":0.028590426,"top":0.14844373,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.03125,"top":0.14924182,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"bounds":{"left":0.028590426,"top":0.1660016,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.16679968,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.03025266,"top":0.16679968,"width":0.015625,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.18355946,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"scripts","depth":27,"bounds":{"left":0.028590426,"top":0.18355946,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.030917553,"top":0.18435754,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"reimport_sms.sh","depth":27,"bounds":{"left":0.03125,"top":0.20111732,"width":0.033909574,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.2019154,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.032912236,"top":0.2019154,"width":0.032247342,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.21707901,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.028590426,"top":0.21867518,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.029920213,"top":0.21947326,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"bounds":{"left":0.028590426,"top":0.23623304,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.029920213,"top":0.23703113,"width":0.024933511,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.028590426,"top":0.25379092,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.254589,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.029920213,"top":0.254589,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.028590426,"top":0.27134877,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.03125,"top":0.27214685,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.28731045,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sms_export.json","depth":27,"bounds":{"left":0.028590426,"top":0.28890663,"width":0.032912236,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.2897047,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.030917553,"top":0.2897047,"width":0.030917553,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.3064645,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"bounds":{"left":0.025930852,"top":0.3064645,"width":0.034574468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.30726257,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.031914894,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.32402235,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude","depth":27,"bounds":{"left":0.028590426,"top":0.32402235,"width":0.01462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.029920213,"top":0.32482043,"width":0.013297873,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.3415802,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"bounds":{"left":0.028590426,"top":0.3415802,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.030917553,"top":0.3423783,"width":0.0066489363,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.35913807,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"bounds":{"left":0.028590426,"top":0.35913807,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.35993615,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.03125,"top":0.35993615,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.37669593,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"bounds":{"left":0.028590426,"top":0.37669593,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.377494,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.03025266,"top":0.377494,"width":0.015625,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.3926576,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.028590426,"top":0.3942538,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.39505187,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.029920213,"top":0.39505187,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.4102155,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"bounds":{"left":0.028590426,"top":0.41181165,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.41260973,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.029920213,"top":0.41260973,"width":0.024933511,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.42777336,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.028590426,"top":0.4293695,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.4301676,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.029920213,"top":0.4301676,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.44533122,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"API.md","depth":27,"bounds":{"left":0.028590426,"top":0.44692737,"width":0.014295213,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.44772545,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.03158245,"top":0.44772545,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.46288908,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.028590426,"top":0.46448523,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.46528333,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.03125,"top":0.46528333,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.48044693,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":27,"bounds":{"left":0.028590426,"top":0.4820431,"width":0.025265958,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.0625,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.17785904,"top":0.047885075,"width":0.040226065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv, Editor Group 1","depth":28,"bounds":{"left":0.21775267,"top":0.047885075,"width":0.046210106,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv, Editor Group 1","depth":28,"bounds":{"left":0.26396278,"top":0.047885075,"width":0.046875,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json, Editor Group 1","depth":28,"bounds":{"left":0.31050533,"top":0.047885075,"width":0.053523935,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Bash tool output (a4j52f), preview, Editor Group 1","depth":28,"bounds":{"left":0.3636968,"top":0.047885075,"width":0.071476065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXTextArea","text":"const ingestLimiter = rateLimit({\n windowMs: 60 * 1000,\n max: 200,\n standardHeaders: true,\n legacyHeaders: false,\n message: { error: 'Too many requests, slow down' },\n});\napp.use('/api/payments/ingest', ingestLimiter);\n\n// Authentik header auth (skips /api/health and /api/payments/ingest)\napp.use(authentikMiddleware);\n\napp.get('/api/health', (_req, res) => {\n res.json({ status: 'ok', timestamp: new Date().toISOString() });\n});","depth":28,"bounds":{"left":0.13763298,"top":0.07581804,"width":0.16589096,"height":0.014365523},"on_screen":true,"value":"const ingestLimiter = rateLimit({\n windowMs: 60 * 1000,\n max: 200,\n standardHeaders: true,\n legacyHeaders: false,\n message: { error: 'Too many requests, slow down' },\n});\napp.use('/api/payments/ingest', ingestLimiter);\n\n// Authentik header auth (skips /api/health and /api/payments/ingest)\napp.use(authentikMiddleware);\n\napp.get('/api/health', (_req, res) => {\n res.json({ status: 'ok', timestamp: new Date().toISOString() });\n});","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"const ingestLimiter = rateLimit({\n windowMs: 60 * 1000,\n max: 200,\n standardHeaders: true,\n legacyHeaders: false,\n message: { error: 'Too many requests, slow down' },\n});\napp.use('/api/payments/ingest', ingestLimiter);\n\n// Authentik header auth (skips /api/health and /api/payments/ingest)\napp.use(authentikMiddleware);\n\napp.get('/api/health', (_req, res) => {\n res.json({ status: 'ok', timestamp: new Date().toISOString() });\n});","depth":29,"bounds":{"left":0.13763298,"top":0.07741421,"width":0.16589096,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Design new payment-logge…, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.07912234,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"expanded","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Design new payment-logger and dsk-uploader hybrid app","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.099734046,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"payments.js","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ets create a new app that should be combination of payment-logger and dsk-uploader. It should have authorization via authentik (auth folder). All three folders (payment-logger, dsk-uploader and auth) are just refference these will be removed later. Auth project is separated it lives on its own. First reveiw them and see how these should be combined. It will be whole new app (also the folder name). Think very carefully of whatr these two apps do and how cold they be combined. THerer should be common db and uploader should store data the same way the /ingest does. It should be properly marked in UI if it is upload or ingest or both. FIrst think of tech stack and plan carefully.","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"I'll explore all three reference projects in parallel to understand their structure before planning.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore payment-logger app structure and functionality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:\n1. Tech stack (frontend framework, backend framework, database)\n2. What the app does - its core purpose and features\n3. Database schema - all tables, relationships\n4. API routes - all endpoints, their purpose and request/response shapes\n5. How data flows (ingest, storage, retrieval)\n6. Any auth/middleware setup\n7. Docker/deployment setup\n8. Key files and their roles\n\nReport with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, and how data is ingested. Be thorough on the /ingest endpoint specifically.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore dsk-uploader app structure and functionality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:\n1. Tech stack (frontend framework, backend framework, database)\n2. What the app does - its core purpose and features\n3. Database schema - all tables, relationships\n4. API routes - all endpoints, their purpose and request/response shapes\n5. How file uploads work - what files, what format, how parsed\n6. Any auth/middleware setup\n7. Docker/deployment setup\n8. Key files and their roles\n\nReport with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, how file upload parsing works, and what data is extracted from uploads. Be very thorough about the data model and what fields are stored.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore auth folder and authentik integration","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/auth directory thoroughly. I need to understand:\n1. What auth system is being used (Authentik)\n2. How authentication/authorization is implemented - OAuth2, OIDC, session tokens, JWT?\n3. Middleware - how is auth enforced on routes?\n4. Any frontend auth flow - login redirect, token handling, protected routes\n5. Environment variables related to auth\n6. Docker/deployment setup for the auth service itself\n7. Any example of how other apps integrate with this auth\n\nReport with: directory structure, auth flow description, middleware code, environment variable names, and integration patterns. This is a reference for building auth into a new combined app.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"payments.js","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"continue","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Launching parallel exploration of all three reference projects.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore payment-logger app structure","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:\n1. Full directory structure (tree)\n2. Tech stack (frontend framework, backend framework, database, etc.)\n3. What the app does - its core functionality\n4. How data is ingested (look at /ingest route especially)\n5. Database schema (what tables/collections exist)\n6. API routes and their purposes\n7. Frontend pages and components\n8. Docker setup\n9. Any auth/session handling\n\nPlease read key files: package.json files, main entry points, route files, database schema files, docker-compose.yml, and any frontend components. Be thorough - I need a complete picture to plan a new combined app.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore dsk-uploader app structure","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:\n1. Full directory structure (tree)\n2. Tech stack (frontend framework, backend framework, database, etc.)\n3. What the app does - its core functionality\n4. How file uploads work (what format, what processing happens)\n5. Database schema (what tables/collections exist)\n6. API routes and their purposes\n7. Frontend pages and components\n8. Docker setup\n9. Any auth/session handling\n\nPlease read key files: package.json files, main entry points, route files, database schema files, docker-compose.yml, and any frontend components. Be thorough - I need a complete picture to plan a new combined app.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore auth project structure","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/auth directory thoroughly. I need to understand:\n1. Full directory structure (tree)\n2. What authentication system is used (authentik integration details)\n3. How OAuth/OIDC flow works\n4. Any middleware or helper functions for protecting routes\n5. Session management approach\n6. How frontend handles auth state\n7. Any example of how other apps integrate with this auth system\n8. Docker setup and environment variables\n\nPlease read all files carefully - this auth system will be integrated into a new combined app. I need to understand exactly how to use it.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a complete picture of all three. Let me design the plan.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Design combined app architecture","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Design a detailed implementation plan for a new combined web app that merges two existing applications. Here is full context:\n\n---\n\n## App 1: payments-logger (Node.js)\n- **Purpose**: Ingest Bulgarian bank SMS → parse → store in PostgreSQL → review/tag/notify in React UI\n- **Stack**: Node.js 20 + Express + Prisma 5 + PostgreSQL 16 + React 18 + Vite + Tailwind CSS\n- **Auth**: Custom JWT (bcryptjs + jose), tokens in localStorage\n- **Ingest**: POST /api/payments/ingest (public) — SMS text OR structured JSON (Apple Wallet)\n- **Schema** (PostgreSQL via Prisma):\n - `payments` table: id, raw_message, date, type (POS/ATM/INTERNET/ECOM/P2P/WALLET), card, recipient, amount, balance, status (UNPROCESSED/SENT/SKIPPED), notifyPhone, notifiedAt, created_at, updated_at\n - `tags` table: id, name, color — M2M with payments via `_PaymentToTag`\n - `users` table: id, username, hashed_password (this will be REMOVED)\n- **UI**: Single-page React app — PaymentTable (sortable, filterable, taggable), FilterBar, status actions (send/skip), notification system\n- **Parser** (backend/src/parser.js): Regex parser for Bulgarian DSK Bank SMS, extracts date/time (DD/MM/YYYY HH:MM), card mask, transaction type, recipient, amount, balance\n\n## App 2: dsk-uploader (Python/Flask)\n- **Purpose**: Upload DSK bank CSV exports → parse/normalize → upload to Notion database\n- **Stack**: Python 3.11 + Flask + Pandas + Custom Notion SDK + Bootstrap 5\n- **Auth**: None (open)\n- **CSV format** (DSK Bank Bulgarian format, columns):\n - `Дата` (date, DD.MM.YYYY)\n - `Вид на трансакцията` (transaction type, Bulgarian)\n - `Основание` (reason/description — contains card number regex: `^\\d{6}x{6}\\d{4}$`)\n - `Дебит BGN` (debit amount, may be empty)\n - `Кредит BGN` (credit amount, may be empty)\n - `Наредител/Получател` (orderer/recipient name)\n - `Номер сметка на наредителя / получателя` (account number)\n- **Processing**: merge multiple CSVs, normalize dates, extract card numbers from reason via regex, auto-generate tags (keyword heuristics: ЗАПЛАТА→Salary, NETFLIX→Subscriptions, etc.), filter internal transfers\n- **Output**: Notion database pages (this will be REPLACED with local PostgreSQL)\n\n## App 3: auth (Authentik)\n- **Mode**: Proxy mode via NPM (forward auth)\n- **How it works**: NPM intercepts all requests, calls Authentik outpost's auth endpoint. On success, NPM injects headers into proxied request:\n - `X-authentik-username` \n - `X-authentik-email`\n - `X-authentik-groups`\n- **No code integration needed** in the app itself — just trust these headers from NPM\n- **Logout**: Redirect user to `/outpost.goauthentik.io/sign_out`\n\n---\n\n## What the New Combined App Must Do\n\n1. **Single PostgreSQL database** for all transactions\n2. **SMS Ingest** (public endpoint) — same as payments-logger /ingest, source=INGEST\n3. **CSV Upload** (authenticated) — parse DSK CSV files, store transactions with source=UPLOAD into the same DB schema\n4. **Unified UI** — show all payments in one table regardless of source\n5. **Source indicator** in UI — badge showing \"INGEST\", \"UPLOAD\", or \"BOTH\" (if duplicate detection added)\n6. **Source filter** in FilterBar — filter by All/Ingest/Upload\n7. **Authentik auth** — remove custom JWT entirely; trust X-authentik-* headers from NPM\n8. **All existing payments-logger features**: tagging, send notification, skip, status tracking, filters, sorting, pagination\n9. **Remove Notion dependency entirely** — all data stays in local PostgreSQL\n\n---\n\n## Technical Constraints\n\n- Keep Node.js backend (not Python) — extend payments-logger's stack\n- CSV parsing: use `csv-parse` npm package (handles encoding, streaming)\n- File upload: use `multer` npm middleware\n- Auth middleware: read X-authentik-username header, 401 if missing (but /api/payments/ingest stays public)\n- Add `source` enum field (INGEST/UPLOAD) to payments schema\n- Add `currency` field (EUR for SMS ingest, BGN for CSV uploads) — or just store as-is\n- Remove `users` table from schema\n\n---\n\n## Please Design\n\n1. Complete folder structure for the new app (suggest name: \"finance-hub\" or similar — note this is a placeholder, user will confirm)\n2. Prisma schema with new fields (`source`, `currency`)\n3. All backend API routes\n4. CSV parser design in Node.js (port of the Python logic)\n5. Authentik auth middleware\n6. Frontend component structure (React) — what's reused from payments-logger, what's new\n7. Docker Compose setup\n8. Environment variables needed\n9. Step-by-step implementation order\n10. Verification checklist\n\nBe specific about file paths and code structure. This will be used to write actual implementation code.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good plan. Let me ask the one thing I need before writing the final plan.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskUserQuestion","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"User has answered your questions: \"What should the new combined app be called? This will be the folder name under /volume2/docker/finance/ and the app branding.\"=\"finance-hub\". You can now continue with the user's answers in mind.","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Writing the final plan now.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"ets-create-a-new-generic-sun.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ets-create-a-new-generic-sun.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"326 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# finance-hub — Implementation Plan\n\n## Context\n\nTwo separate finance apps exist as references and will be retired:\n- **payments-logger** (Node.js/React): Ingests Bulgarian bank SMS notifications, stores payments in PostgreSQL, provides a review/tag/notify UI.\n- **dsk-uploader** (Python/Flask): Uploads DSK bank CSV exports, parses them, sends to Notion.\n\nThe new app **finance-hub** (`/volume2/docker/finance/finance-hub/`) replaces both with a single unified system: all transactions (SMS-ingested and CSV-uploaded) land in one PostgreSQL database and one React UI. Authentication is delegated entirely to Authentik (proxy mode via NPM — no custom JWT).\n\n---\n\n## Tech Stack\n\n| Layer | Choice | Rationale |\n|-------|--------|-----------|\n| Backend | Node.js 20 + Express + Prisma 5 | Extends payments-logger; no Python needed |\n| CSV parsing | `csv-parse` + `iconv-lite` | Handles Bulgarian cp1251 encoding, RFC4180 quoted fields |\n| File upload | `multer` (memory storage) | Bank CSVs are small (<500 KB), no disk cleanup needed |\n| Database | PostgreSQL 16 | Same as payments-logger |\n| Frontend | React 18 + Vite + Tailwind CSS + Lucide React | Same as payments-logger |\n| Auth | Authentik proxy via NPM headers | No custom JWT; removes users table entirely |\n| Container | Docker Compose | Same pattern as both reference apps |\n\n**Removed vs payments-logger:** `bcryptjs`, `jose`, `users` table, login form, JWT storage. \n**Removed vs dsk-uploader:** Python/Flask, Pandas, Notion SDK, all Notion references. \n**Added:** `csv-parse`, `iconv-lite`, `multer`, `source` + `currency` fields, `UploadPanel` component.\n\n---\n\n## Folder Structure\n\n```\n/volume2/docker/finance/finance-hub/\n├── docker-compose.yml\n├── .env\n├── .env.example\n├── .gitignore\n├── backend/\n│ ├── Dockerfile\n│ ├── package.json\n│ ├── prisma/\n│ │ ├── schema.prisma\n│ │ └── migrations/\n│ │ ├── migration_lock.toml\n│ │ └── 20260508_init/\n│ │ └── migration.sql\n│ └── src/\n│ ├── index.js ← entry point (Authentik middleware wired here)\n│ ├── auth.js ← Authentik header middleware (replaces JWT auth)\n│ ├── parser.js ← SMS parser (copy verbatim from payments-logger)\n│ ├── csvParser.js ← NEW: DSK CSV parser (port of Python dskuploader.py)\n│ └── routes/\n│ ├── payments.js ← existing routes + source/currency additions\n│ └── upload.js ← NEW: POST /api/upload/csv\n└── frontend/\n ├── Dockerfile\n ├── package.json\n ├── vite.config.js\n ├── tailwind.config.js\n ├── postcss.config.js\n ├── index.html\n └── src/\n ├── main.jsx ← remove AuthProvider wrapper\n ├── index.css\n ├── App.jsx ← remove auth state, add Upload tab toggle\n └── components/\n ├── FilterBar.jsx ← add source filter select\n ├── PaymentTable.jsx ← add Source badge column + currency display\n ├── PaymentCard.jsx ← minor source badge addition\n ├── PaymentList.jsx ← unchanged\n └── UploadPanel.jsx ← NEW: drag-and-drop CSV upload UI\n```\n\n---\n\n## Database Schema (Prisma)\n\nFile: `backend/prisma/schema.prisma`\n\n```prisma\ngenerator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel Payment {\n id Int @id @default(autoincrement())\n rawMessage String @map(\"raw_message\")\n date DateTime?\n type String?\n card String?\n recipient String?\n amount Float?\n currency String? @default(\"EUR\")\n balance Float?\n source Source @default(INGEST)\n status Status @default(UNPROCESSED)\n tags Tag[]\n notifiedAt DateTime? @map(\"notified_at\")\n notifyPhone String? @map(\"notify_phone\")\n debitBgn Float? @map(\"debit_bgn\")\n creditBgn Float? @map(\"credit_bgn\")\n transactionType String? @map(\"transaction_type\")\n payerAccount String? @map(\"payer_account\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@map(\"payments\")\n}\n\nmodel Tag {\n id Int @id @default(autoincrement())\n name String @unique\n color String @default(\"#6b7280\")\n payments Payment[]\n\n @@map(\"tags\")\n}\n\nenum Status { UNPROCESSED SENT SKIPPED }\nenum Source { INGEST UPLOAD }\n```\n\n**Key decisions:**\n- No `User` model — Authentik owns identity.\n- `currency`: `EUR` for SMS ingest, `BGN` for CSV uploads.\n- `debitBgn`, `creditBgn`, `transactionType`, `payerAccount`: nullable CSV-only columns; INGEST rows store nulls. Avoids a union query for the unified list view.\n- `balance` is always null for CSV rows (DSK export does not include running balance).\n- Fresh consolidated migration — no data migration from reference apps required.\n\n---\n\n## API Routes\n\n| Method | Path | Auth | Description |\n|--------|------|------|-------------|\n| GET | /api/health | public | Health check |\n| POST | /api/payments/ingest | public | SMS or structured ingest (source=INGEST) |\n| GET | /api/payments | required | List with filters/sort/pagination (+ source filter) |\n| GET | /api/payments/meta/tags | required | All tags |\n| GET | /api/payments/meta/filters | required | Filter options incl. `sources` array |\n| GET | /api/payments/:id | required | Single payment |\n| PATCH | /api/payments/:id | required | Update status |\n| DELETE | /api/payments/:id | required | Delete |\n| POST | /api/payments/:id/send | required | Send notification |\n| POST | /api/payments/:id/skip | required | Skip |\n| POST | /api/payments/:id/tags | required | Add/upsert tag |\n| DELETE | /api/payments/:id/tags/:tagId | required | Remove tag |\n| POST | /api/upload/csv | required | DSK CSV file upload (source=UPLOAD) |\n\n---\n\n## Key Implementation Details\n\n### auth.js (replaces entire old auth module)\n```js\nconst PUBLIC_PATHS = new Set(['/api/health', '/api/payments/ingest']);\n\nfunction authentikMiddleware(req, res, next) {\n if (PUBLIC_PATHS.has(req.path)) return next();\n const username = req.headers['x-authentik-username'];\n if (!username) return res.status(401).json({ error: 'Unauthorized' });\n req.user = {\n username,\n email: req.headers['x-authentik-email'] || null,\n groups: (req.headers['x-authentik-groups'] || '').split(',').map(g => g.trim()).filter(Boolean),\n };\n next();\n}\nmodule.exports = { authentikMiddleware };\n```\n\n### csvParser.js (port of dskuploader.py)\n- `iconv-lite` decodes buffer as cp1251 (DSK Bank export encoding), falls back to UTF-8\n- `csv-parse` parses the decoded text with `columns: true`\n- Columns: `Дата`, `Вид на трансакцията`, `Основание`, `Дебит BGN`, `Кредит BGN`, `Наредител/Получател`, `Номер сметка на наредителя / получателя`\n- Card extraction: regex `/^\\d{6}x{6}\\d{4}$/` on first token of `Основание`\n- Skips rows where `Вид на трансакцията === 'ТРАНСФЕР СОБСТВЕНИ СМЕТКИ'`\n- Auto-tags via keyword rules (ЗАПЛАТА→Salary, LIDL→Groceries, NETFLIX→Subscriptions, etc.) — same logic as Python `generate_tags()`\n- Returns `{ rows: PaymentData[], skipped: number, errors: string[] }`\n\n### payments.js changes from payments-logger\n1. Add `source: 'INGEST'` and `currency` to the `/ingest` create call\n2. Add `source` to the `GET /` where clause filter\n3. Add `sources` to `meta/filters` response\n4. Currency-aware amount formatting in notification message\n5. Remove all JWT/auth references (no `/auth/register`, `/auth/login`)\n\n### upload.js (new)\n- `multer` memory storage, max 10 files × 10 MB\n- Calls `parseDskCsv(buffer)` per file\n- Upserts tags via `prisma.tag.upsert` then connects\n- Returns `{ imported, skipped, errors, payments[] }`\n\n### Frontend changes\n- **Delete**: `auth.js`, `AuthProvider.jsx`\n- **main.jsx**: Remove `<AuthProvider>` wrapper\n- **App.jsx**: Replace `authFetch` with plain `fetch` (Authentik session cookie travels automatically); logout → `window.location.href = '/outpost.goauthentik.io/sign_out'`; add \"Payments\" / \"Upload CSV\" tab toggle\n- **FilterBar.jsx**: Add source `<select>` (All / SMS Ingest / CSV Upload); widen grid to 5 cols\n- **PaymentTable.jsx**: Add `Source` column with `SMS` (indigo) / `CSV` (emerald) badge; show `${amount} ${currency}` in amount cell\n- **UploadPanel.jsx** (new): Drag-and-drop zone + file list + import button + result summary with error accordion; calls `POST /api/upload/csv` with `FormData`\n\n---\n\n## Docker Compose\n\n```yaml\nservices:\n db:\n image: postgres:16-alpine\n environment: { POSTGRES_USER: finance, POSTGRES_PASSWORD: ${DB_PASSWORD}, POSTGRES_DB: finance_hub }\n volumes: [pgdata:/var/lib/postgresql/data]\n healthcheck: { test: pg_isready -U finance -d finance_hub, interval: 5s }\n\n backend:\n build: ./backend\n environment:\n DATABASE_URL: postgresql://finance:${DB_PASSWORD}@db:5432/finance_hub\n PORT: \"3001\"\n NOTIFIER_URL: ${NOTIFIER_URL}\n NOTIFIER_CHANNEL: ${NOTIFIER_CHANNEL:-viber}\n NOTIFY_DEFAULT_PHONE: ${NOTIFY_DEFAULT_PHONE}\n TZ: ${TZ:-Europe/Sofia}\n ports: [\"${BACKEND_PORT:-3001}:3001\"]\n depends_on: { db: { condition: service_healthy } }\n\n frontend:\n build: ./frontend\n ports: [\"${FRONTEND_PORT:-5175}:5173\"]\n depends_on: [backend]\n\nvolumes: { pgdata: }\n```\n\n**NPM setup:** Frontend port proxied through Authentik forward auth. Backend port exposed separately (unprotected) so the public `/api/payments/ingest` remains reachable by iOS Shortcuts / SMS gateways without login.\n\n---\n\n## Environment Variables (.env)\n\n```bash\nDB_PASSWORD=change_me\nNOTIFIER_URL=https://notifier.lakylak.xyz\nNOTIFIER_CHANNEL=viber\nNOTIFY_DEFAULT_PHONE=+359000000000\nTZ=Europe/Sofia\nBACKEND_PORT=3001\nFRONTEND_PORT=5175\n```\n\nRemoved vs payments-logger: `JWT_SECRET`, `JWT_EXPIRE_MINUTES`.\n\n---\n\n## Implementation Order\n\n1. Create folder structure and write `docker-compose.yml`, `.env.example`, `.gitignore`\n2. Write `backend/prisma/schema.prisma` and migration SQL\n3. Write `backend/package.json` (add `csv-parse`, `iconv-lite`, `multer`; remove `bcryptjs`, `jose`)\n4. Write `backend/Dockerfile`\n5. Write `backend/src/auth.js` (Authentik middleware)\n6. Copy `backend/src/parser.js` verbatim from payments-logger\n7. Write `backend/src/csvParser.js` (Python port)\n8. Write `backend/src/routes/upload.js`\n9. Write `backend/src/routes/payments.js` (from payments-logger + 5 changes listed above)\n10. Write `backend/src/index.js`\n11. Copy frontend base from payments-logger; delete `auth.js` + `AuthProvider.jsx`\n12. Update `main.jsx`, `App.jsx`, `FilterBar.jsx`, `PaymentTable.jsx`\n13. Write `frontend/src/components/UploadPanel.jsx`\n14. Update `frontend/vite.config.js`\n15. `docker compose build && docker compose up -d`\n16. Run verification checklist\n\n---\n\n## Verification\n\n**Schema**\n- `payments` table has `source`, `currency`, `debit_bgn`, `credit_bgn`, `transaction_type`, `payer_account`\n- No `users` table; `Source` enum exists\n\n**Auth**\n- `GET /api/payments` → 401 without `x-authentik-username` header\n- `POST /api/payments/ingest` → 201 without any header\n- `curl -H \"x-authentik-username: test\" localhost:3001/api/payments` → 200\n\n**SMS Ingest**\n- DSK POS SMS → `source=INGEST`, `currency=EUR`, correct amount/card/recipient\n- Apple Wallet structured body → `type=WALLET`, `source=INGEST`\n- Rate limiter → 429 after 200 req/min\n\n**CSV Upload**\n- Single DSK CSV → rows with `source=UPLOAD`, `currency=BGN`\n- Multiple CSVs in one request → all merged\n- `ТРАНСФЕР СОБСТВЕНИ СМЕТКИ` rows counted in `skipped`, not imported\n- Card regex match from `Основание` column\n- Auto-tags applied (ЗАПЛАТА→Salary, LIDL→Groceries)\n- cp1251 file imports correctly\n\n**UI**\n- Source badge visible in payment table (SMS indigo, CSV emerald)\n- Source dropdown in FilterBar filters correctly\n- Amount shows correct currency per row\n- Upload Panel: drag-and-drop works, result summary shows counts\n- Logout redirects to Authentik sign_out\n- No login form shown (Authentik handles it at NPM level)\n- Tags, send, skip, delete all still work\n\n## Reference Files\n\n- `/volume2/docker/finance/payments-logger/backend/src/routes/payments.js`\n- `/volume2/docker/finance/payments-logger/backend/src/parser.js`\n- `/volume2/docker/finance/payments-logger/backend/src/index.js`\n- `/volume2/docker/finance/payments-logger/backend/src/auth.js`\n- `/volume2/docker/finance/payments-logger/backend/prisma/schema.prisma`\n- `/volume2/docker/finance/payments-logger/frontend/src/App.jsx`\n- `/volume2/docker/finance/payments-logger/frontend/src/components/PaymentTable.jsx`\n- `/volume2/docker/finance/payments-logger/frontend/src/components/FilterBar.jsx`\n- `/volume2/docker/finance/dsk-uploader/dskuploader.py`\n- `/volume2/docker/finance/auth/docker-compose.yml`","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Claude’s Plan","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"ets-create-a-new-generic-sun.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ets-create-a-new-generic-sun.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stayed in plan mode","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good question. Here's the full breakdown:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Backend Tech Stack — Options","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Backend Tech Stack — Options","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option A: Node.js + Express + Prisma (my recommendation)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option A: Node.js + Express + Prisma (my recommendation)","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Why:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger is already Node.js/Express/Prisma. The new app is 80% payments-logger with CSV upload added on top. Keeping the same stack means:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Copy","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"parser.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"verbatim, zero rewrite","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Copy the entire","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"routes/payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"with minimal edits","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Same Prisma schema workflow, same migrations, same Docker image","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The CSV parsing logic (the only Python-specific thing) ports cleanly to","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"csv-parse","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— it's just regex + string manipulation, nothing pandas-specific","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Trade-off:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Have to port the Python CSV parsing to JS. It's ~150 lines and mostly string manipulation — straightforward.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option B: Python + FastAPI + SQLAlchemy","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option B: Python + FastAPI + SQLAlchemy","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rewrite everything in Python. dsk-uploader is Python, so CSV parsing is already done.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pro:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keep the dsk-uploader CSV logic as-is (no porting). Python has better data science libraries if you later add analytics.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Con:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Lose the entire payments-logger backend (routes, parser, Prisma schema) — full rewrite. FastAPI + SQLAlchemy is a different mental model than Express + Prisma. Frontend stays React anyway, so the stack split doesn't simplify anything.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verdict:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"More work overall, gains almost nothing.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option C: Hybrid microservices (Node.js backend + Python CSV service)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option C: Hybrid microservices (Node.js backend + Python CSV service)","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keep Node.js as the main API, add a separate Python FastAPI service just for CSV parsing. They share the DB.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pro:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Zero porting — Python CSV code used as-is.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Con:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Two backend services to maintain, deploy, and keep in sync. Inter-service HTTP calls. Two Dockerfiles. For ~150 lines of CSV logic, this is massively over-engineered.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verdict:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Not worth it.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option D: Python + Flask (exactly like dsk-uploader)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option D: Python + Flask (exactly like dsk-uploader)","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Extend dsk-uploader into a full payments app.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pro:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pandas for CSV, no porting.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Con:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Jinja2 templates instead of React (or add React separately). Would need to reimplement the entire payments-logger (SMS parser, notification system, tag management, pagination/filtering). Flask's Jinja templating is far less capable than the existing React UI. The React frontend is the stronger UI foundation.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verdict:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worst of all options — rebuild the harder parts (UI, SMS parser, notification) for no gain.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Summary","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Summary","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Option","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV porting effort","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"App rewrite effort","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Result quality","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"A (Node.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Medium (150 lines)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Minimal","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Best","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"B (Python FastAPI)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"High (full backend)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worse","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C (Hybrid)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Low + infra overhead","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Overkill","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"D (Python Flask)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Very high","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worst","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Option","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"A (Node.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"B (Python FastAPI)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C (Hybrid)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"D (Python Flask)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV porting effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Medium (150 lines)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"App rewrite effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Minimal","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"High (full backend)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Low + infra overhead","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Very high","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Result quality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Best","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worse","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Overkill","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worst","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Option","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV porting effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"App rewrite effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Result quality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The CSV parser port (the only cost of Option A) is a one-time ~150 line exercise. Everything else in the plan reuses payments-logger code directly. That's why Node.js is the clear winner here.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Want to adjust the stack, or shall I proceed with Option A?","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ok sounds good. Implement all you suggested","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Starting implementation. Let me first read all the reference files I'll need to copy from.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"parser.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"parser.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"payments.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"App.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"App.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"FilterBar.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"FilterBar.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"PaymentTable.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PaymentTable.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now let me read the remaining frontend files and the Dockerfile from payments-logger.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.css","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.css","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"vite.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"vite.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"tailwind.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"tailwind.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"postcss.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"postcss.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"dskuploader.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"dskuploader.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me also grab the remaining frontend components.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"PaymentCard.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PaymentCard.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"PaymentList.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PaymentList.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"schema.prisma","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"schema.prisma","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good, I have everything I need. Let me set up the todo list and start building.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create finance-hub directory structure","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"mkdir -p /volume2/docker/finance/finance-hub/backend/src/routes \\\n /volume2/docker/finance/finance-hub/backend/prisma/migrations/20260508_init \\\n /volume2/docker/finance/finance-hub/frontend/src/components && echo \"done\"","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"done","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"45 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"version: '3.8'\n\nservices:\n db:\n image: postgres:16-alpine\n restart: unless-stopped\n environment:\n POSTGRES_USER: finance\n POSTGRES_PASSWORD: ${DB_PASSWORD}\n POSTGRES_DB: finance_hub\n volumes:\n - pgdata:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U finance -d finance_hub\"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n backend:\n build: ./backend\n restart: unless-stopped\n environment:\n DATABASE_URL: postgresql://finance:${DB_PASSWORD}@db:5432/finance_hub\n PORT: \"3001\"\n NOTIFIER_URL: ${NOTIFIER_URL}\n NOTIFIER_CHANNEL: ${NOTIFIER_CHANNEL:-viber}\n NOTIFY_DEFAULT_PHONE: ${NOTIFY_DEFAULT_PHONE}\n TZ: ${TZ:-Europe/Sofia}\n ports:\n - \"${BACKEND_PORT:-3001}:3001\"\n depends_on:\n db:\n condition: service_healthy\n\n frontend:\n build: ./frontend\n restart: unless-stopped\n ports:\n - \"${FRONTEND_PORT:-5175}:5173\"\n depends_on:\n - backend\n\nvolumes:\n pgdata:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env.example","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env.example","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"15 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Database\nDB_PASSWORD=change_me_strong_password\n\n# Notifier service (for SMS payment notifications)\nNOTIFIER_URL=https://notifier.lakylak.xyz\nNOTIFIER_CHANNEL=viber\nNOTIFY_DEFAULT_PHONE=+359000000000\n\n# Timezone (used by SMS parser for Bulgarian bank timestamps)\nTZ=Europe/Sofia\n\n# Ports (optional — defaults shown)\nBACKEND_PORT=3001\nFRONTEND_PORT=5175","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".gitignore","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".gitignore","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"5 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env\nnode_modules/\ndist/\n*.log","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"schema.prisma","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"schema.prisma","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"54 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"generator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel Payment {\n id Int @id @default(autoincrement())\n rawMessage String @map(\"raw_message\")\n date DateTime?\n type String?\n card String?\n recipient String?\n amount Float?\n currency String? @default(\"EUR\")\n balance Float?\n source Source @default(INGEST)\n status Status @default(UNPROCESSED)\n tags Tag[]\n notifiedAt DateTime? @map(\"notified_at\")\n notifyPhone String? @map(\"notify_phone\")\n debitBgn Float? @map(\"debit_bgn\")\n creditBgn Float? @map(\"credit_bgn\")\n transactionType String? @map(\"transaction_type\")\n payerAccount String? @map(\"payer_account\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@map(\"payments\")\n}\n\nmodel Tag {\n id Int @id @default(autoincrement())\n name String @unique\n color String @default(\"#6b7280\")\n payments Payment[]\n\n @@map(\"tags\")\n}\n\nenum Status {\n UNPROCESSED\n SENT\n SKIPPED\n}\n\nenum Source {\n INGEST\n UPLOAD\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"migration.sql","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"migration.sql","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"55 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"-- CreateEnum\nCREATE TYPE \"Status\" AS ENUM ('UNPROCESSED', 'SENT', 'SKIPPED');\nCREATE TYPE \"Source\" AS ENUM ('INGEST', 'UPLOAD');\n\n-- CreateTable\nCREATE TABLE \"payments\" (\n \"id\" SERIAL PRIMARY KEY,\n \"raw_message\" TEXT NOT NULL,\n \"date\" TIMESTAMP(3),\n \"type\" TEXT,\n \"card\" TEXT,\n \"recipient\" TEXT,\n \"amount\" DOUBLE PRECISION,\n \"currency\" TEXT DEFAULT 'EUR',\n \"balance\" DOUBLE PRECISION,\n \"source\" \"Source\" NOT NULL DEFAULT 'INGEST',\n \"status\" \"Status\" NOT NULL DEFAULT 'UNPROCESSED',\n \"notified_at\" TIMESTAMP(3),\n \"notify_phone\" TEXT,\n \"debit_bgn\" DOUBLE PRECISION,\n \"credit_bgn\" DOUBLE PRECISION,\n \"transaction_type\" TEXT,\n \"payer_account\" TEXT,\n \"created_at\" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,\n \"updated_at\" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n\n-- CreateTable\nCREATE TABLE \"tags\" (\n \"id\" SERIAL PRIMARY KEY,\n \"name\" TEXT NOT NULL,\n \"color\" TEXT NOT NULL DEFAULT '#6b7280'\n);\n\n-- CreateUniqueIndex\nCREATE UNIQUE INDEX \"tags_name_key\" ON \"tags\"(\"name\");\n\n-- CreateTable (M2M join)\nCREATE TABLE \"_PaymentToTag\" (\n \"A\" INTEGER NOT NULL,\n \"B\" INTEGER NOT NULL,\n CONSTRAINT \"_PaymentToTag_AB_pkey\" PRIMARY KEY (\"A\", \"B\")\n);\n\nCREATE INDEX \"_PaymentToTag_B_index\" ON \"_PaymentToTag\"(\"B\");\n\n-- AddForeignKey\nALTER TABLE \"_PaymentToTag\"\n ADD CONSTRAINT \"_PaymentToTag_A_fkey\"\n FOREIGN KEY (\"A\") REFERENCES \"payments\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;\n\nALTER TABLE \"_PaymentToTag\"\n ADD CONSTRAINT \"_PaymentToTag_B_fkey\"\n FOREIGN KEY (\"B\") REFERENCES \"tags\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"migration_lock.toml","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"migration_lock.toml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Please do not edit this file manually\n# It should be added in your version-control system (e.g., Git)\nprovider = \"postgresql\"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"26 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"{\n \"name\": \"finance-hub-backend\",\n \"version\": \"1.0.0\",\n \"main\": \"src/index.js\",\n \"scripts\": {\n \"start\": \"node src/index.js\",\n \"dev\": \"nodemon src/index.js\",\n \"prisma:generate\": \"prisma generate\",\n \"prisma:migrate\": \"prisma migrate deploy\"\n },\n \"dependencies\": {\n \"@prisma/client\": \"^5.22.0\",\n \"cors\": \"^2.8.5\",\n \"csv-parse\": \"^5.5.6\",\n \"express\": \"^4.21.1\",\n \"express-rate-limit\": \"^7.4.0\",\n \"iconv-lite\": \"^0.6.3\",\n \"morgan\": \"^1.10.0\",\n \"multer\": \"^1.4.5-lts.1\"\n },\n \"devDependencies\": {\n \"nodemon\": \"^3.1.7\",\n \"prisma\": \"^5.22.0\"\n }\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"18 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FROM node:20-alpine\n\nRUN apk add --no-cache openssl\n\nWORKDIR /app\n\nCOPY package.json package-lock.json* ./\nRUN npm install\n\nCOPY prisma ./prisma\nRUN npx prisma generate\n\nCOPY src ./src\n\nEXPOSE 3001\n\nCMD [\"sh\", \"-c\", \"npx prisma migrate deploy && node src/index.js\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"auth.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"auth.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"27 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"const PUBLIC_PATHS = new Set([\n '/api/health',\n '/api/payments/ingest',\n]);\n\nfunction authentikMiddleware(req, res, next) {\n if (PUBLIC_PATHS.has(req.path)) return next();\n\n const username = req.headers['x-authentik-username'];\n if (!username) {\n return res.status(401).json({ error: 'Unauthorized — missing Authentik session' });\n }\n\n req.user = {\n username,\n email: req.headers['x-authentik-email'] || null,\n groups: (req.headers['x-authentik-groups'] || '')\n .split(',')\n .map(g => g.trim())\n .filter(Boolean),\n };\n\n next();\n}\n\nmodule.exports = { authentikMiddleware };","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"}]...
|
9167387550660866827
|
1909019661218114523
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
scripts
reimport_sms.sh
.env
.env.example
.gitignore
docker-compose.yml
sms_export.json
payments-logger
.claude
auth
backend
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
Bash tool output (a4j52f), preview, Editor Group 1
const ingestLimiter = rateLimit({
windowMs: 60 * 1000,
max: 200,
standardHeaders: true,
legacyHeaders: false,
message: { error: 'Too many requests, slow down' },
});
app.use('/api/payments/ingest', ingestLimiter);
// Authentik header auth (skips /api/health and /api/payments/ingest)
app.use(authentikMiddleware);
app.get('/api/health', (_req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
});
const ingestLimiter = rateLimit({
windowMs: 60 * 1000,
max: 200,
standardHeaders: true,
legacyHeaders: false,
message: { error: 'Too many requests, slow down' },
});
app.use('/api/payments/ingest', ingestLimiter);
// Authentik header auth (skips /api/health and /api/payments/ingest)
app.use(authentikMiddleware);
app.get('/api/health', (_req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
});
Design new payment-logge…, Editor Group 2
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
expanded
Design new payment-logger and dsk-uploader hybrid app
Session history
New session
Message actions
payments.js
payments.js
ets create a new app that should be combination of payment-logger and dsk-uploader. It should have authorization via authentik (auth folder). All three folders (payment-logger, dsk-uploader and auth) are just refference these will be removed later. Auth project is separated it lives on its own. First reveiw them and see how these should be combined. It will be whole new app (also the folder name). Think very carefully of whatr these two apps do and how cold they be combined. THerer should be common db and uploader should store data the same way the /ingest does. It should be properly marked in UI if it is upload or ingest or both. FIrst think of tech stack and plan carefully.
Thinking
Thinking
I'll explore all three reference projects in parallel to understand their structure before planning.
Agent:
Explore payment-logger app structure and functionality
IN
Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How data flows (ingest, storage, retrieval)
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, and how data is ingested. Be thorough on the /ingest endpoint specifically.
Agent:
Explore dsk-uploader app structure and functionality
IN
Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How file uploads work - what files, what format, how parsed
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, how file upload parsing works, and what data is extracted from uploads. Be very thorough about the data model and what fields are stored.
Agent:
Explore auth folder and authentik integration
IN
Explore the /volume2/docker/finance/auth directory thoroughly. I need to understand:
1. What auth system is being used (Authentik)
2. How authentication/authorization is implemented - OAuth2, OIDC, session tokens, JWT?
3. Middleware - how is auth enforced on routes?
4. Any frontend auth flow - login redirect, token handling, protected routes
5. Environment variables related to auth
6. Docker/deployment setup for the auth service itself
7. Any example of how other apps integrate with this auth
Report with: directory structure, auth flow description, middleware code, environment variable names, and integration patterns. This is a reference for building auth into a new combined app.
Message actions
payments.js
payments.js
continue
Thinking
Thinking
Launching parallel exploration of all three reference projects.
Agent:
Explore payment-logger app structure
IN
Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:
1. Full directory structure (tree)
2. Tech stack (frontend framework, backend framework, database, etc.)
3. What the app does - its core functionality
4. How data is ingested (look at /ingest route especially)
5. Database schema (what tables/collections exist)
6. API routes and their purposes
7. Frontend pages and components
8. Docker setup
9. Any auth/session handling
Please read key files: package.json files, main entry points, route files, database schema files, docker-compose.yml, and any frontend components. Be thorough - I need a complete picture to plan a new combined app.
Agent:
Explore dsk-uploader app structure
IN
Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:
1. Full directory structure (tree)
2. Tech stack (frontend framework, backend framework, database, etc.)
3. What the app does - its core functionality
4. How file uploads work (what format, what processing happens)
5. Database schema (what tables/collections exist)
6. API routes and their purposes
7. Frontend pages and components
8. Docker setup
9. Any auth/session handling
Please read key files: package.json files, main entry points, route files, database schema files, docker-compose.yml, and any frontend components. Be thorough - I need a complete picture to plan a new combined app.
Agent:
Explore auth project structure
IN
Explore the /volume2/docker/finance/auth directory thoroughly. I need to understand:
1. Full directory structure (tree)
2. What authentication system is used (authentik integration details)
3. How OAuth/OIDC flow works
4. Any middleware or helper functions for protecting routes
5. Session management approach
6. How frontend handles auth state
7. Any example of how other apps integrate with this auth system
8. Docker setup and environment variables
Please read all files carefully - this auth system will be integrated into a new combined app. I need to understand exactly how to use it.
Thinking
Thinking
Now I have a complete picture of all three. Let me design the plan.
Agent:
Design combined app architecture
IN
Design a detailed implementation plan for a new combined web app that merges two existing applications. Here is full context:
---
## App 1: payments-logger (Node.js)
- **Purpose**: Ingest Bulgarian bank SMS → parse → store in PostgreSQL → review/tag/notify in React UI
- **Stack**: Node.js 20 + Express + Prisma 5 + PostgreSQL 16 + React 18 + Vite + Tailwind CSS
- **Auth**: Custom JWT (bcryptjs + jose), tokens in localStorage
- **Ingest**: POST /api/payments/ingest (public) — SMS text OR structured JSON (Apple Wallet)
- **Schema** (PostgreSQL via Prisma):
- `payments` table: id, raw_message, date, type (POS/ATM/INTERNET/ECOM/P2P/WALLET), card, recipient, amount, balance, status (UNPROCESSED/SENT/SKIPPED), notifyPhone, notifiedAt, created_at, updated_at
- `tags` table: id, name, color — M2M with payments via `_PaymentToTag`
- `users` table: id, username, hashed_password (this will be REMOVED)
- **UI**: Single-page React app — PaymentTable (sortable, filterable, taggable), FilterBar, status actions (send/skip), notification system
- **Parser** (backend/src/parser.js): Regex parser for Bulgarian DSK Bank SMS, extracts date/time (DD/MM/YYYY HH:MM), card mask, transaction type, recipient, amount, balance
## App 2: dsk-uploader (Python/Flask)
- **Purpose**: Upload DSK bank CSV exports → parse/normalize → upload to Notion database
- **Stack**: Python 3.11 + Flask + Pandas + Custom Notion SDK + Bootstrap 5
- **Auth**: None (open)
- **CSV format** (DSK Bank Bulgarian format, columns):
- `Дата` (date, DD.MM.YYYY)
- `Вид на трансакцията` (transaction type, Bulgarian)
- `Основание` (reason/description — contains card number regex: `^\d{6}x{6}\d{4}$`)
- `Дебит BGN` (debit amount, may be empty)
- `Кредит BGN` (credit amount, may be empty)
- `Наредител/Получател` (orderer/recipient name)
- `Номер сметка на наредителя / получателя` (account number)
- **Processing**: merge multiple CSVs, normalize dates, extract card numbers from reason via regex, auto-generate tags (keyword heuristics: ЗАПЛАТА→Salary, NETFLIX→Subscriptions, etc.), filter internal transfers
- **Output**: Notion database pages (this will be REPLACED with local PostgreSQL)
## App 3: auth (Authentik)
- **Mode**: Proxy mode via NPM (forward auth)
- **How it works**: NPM intercepts all requests, calls Authentik outpost's auth endpoint. On success, NPM injects headers into proxied request:
- `X-authentik-username`
- `X-authentik-email`
- `X-authentik-groups`
- **No code integration needed** in the app itself — just trust these headers from NPM
- **Logout**: Redirect user to `/outpost.goauthentik.io/sign_out`
---
## What the New Combined App Must Do
1. **Single PostgreSQL database** for all transactions
2. **SMS Ingest** (public endpoint) — same as payments-logger /ingest, source=INGEST
3. **CSV Upload** (authenticated) — parse DSK CSV files, store transactions with source=UPLOAD into the same DB schema
4. **Unified UI** — show all payments in one table regardless of source
5. **Source indicator** in UI — badge showing "INGEST", "UPLOAD", or "BOTH" (if duplicate detection added)
6. **Source filter** in FilterBar — filter by All/Ingest/Upload
7. **Authentik auth** — remove custom JWT entirely; trust X-authentik-* headers from NPM
8. **All existing payments-logger features**: tagging, send notification, skip, status tracking, filters, sorting, pagination
9. **Remove Notion dependency entirely** — all data stays in local PostgreSQL
---
## Technical Constraints
- Keep Node.js backend (not Python) — extend payments-logger's stack
- CSV parsing: use `csv-parse` npm package (handles encoding, streaming)
- File upload: use `multer` npm middleware
- Auth middleware: read X-authentik-username header, 401 if missing (but /api/payments/ingest stays public)
- Add `source` enum field (INGEST/UPLOAD) to payments schema
- Add `currency` field (EUR for SMS ingest, BGN for CSV uploads) — or just store as-is
- Remove `users` table from schema
---
## Please Design
1. Complete folder structure for the new app (suggest name: "finance-hub" or similar — note this is a placeholder, user will confirm)
2. Prisma schema with new fields (`source`, `currency`)
3. All backend API routes
4. CSV parser design in Node.js (port of the Python logic)
5. Authentik auth middleware
6. Frontend component structure (React) — what's reused from payments-logger, what's new
7. Docker Compose setup
8. Environment variables needed
9. Step-by-step implementation order
10. Verification checklist
Be specific about file paths and code structure. This will be used to write actual implementation code.
Thinking
Thinking
Good plan. Let me ask the one thing I need before writing the final plan.
AskUserQuestion
OUT
User has answered your questions: "What should the new combined app be called? This will be the folder name under /volume2/docker/finance/ and the app branding."="finance-hub". You can now continue with the user's answers in mind.
Thinking
Thinking
Writing the final plan now.
Thinking
Thinking
Write
ets-create-a-new-generic-sun.md
ets-create-a-new-generic-sun.md
326 lines
# finance-hub — Implementation Plan
## Context
Two separate finance apps exist as references and will be retired:
- **payments-logger** (Node.js/React): Ingests Bulgarian bank SMS notifications, stores payments in PostgreSQL, provides a review/tag/notify UI.
- **dsk-uploader** (Python/Flask): Uploads DSK bank CSV exports, parses them, sends to Notion.
The new app **finance-hub** (`/volume2/docker/finance/finance-hub/`) replaces both with a single unified system: all transactions (SMS-ingested and CSV-uploaded) land in one PostgreSQL database and one React UI. Authentication is delegated entirely to Authentik (proxy mode via NPM — no custom JWT).
---
## Tech Stack
| Layer | Choice | Rationale |
|-------|--------|-----------|
| Backend | Node.js 20 + Express + Prisma 5 | Extends payments-logger; no Python needed |
| CSV parsing | `csv-parse` + `iconv-lite` | Handles Bulgarian cp1251 encoding, RFC4180 quoted fields |
| File upload | `multer` (memory storage) | Bank CSVs are small (<500 KB), no disk cleanup needed |
| Database | PostgreSQL 16 | Same as payments-logger |
| Frontend | React 18 + Vite + Tailwind CSS + Lucide React | Same as payments-logger |
| Auth | Authentik proxy via NPM headers | No custom JWT; removes users table entirely |
| Container | Docker Compose | Same pattern as both reference apps |
**Removed vs payments-logger:** `bcryptjs`, `jose`, `users` table, login form, JWT storage.
**Removed vs dsk-uploader:** Python/Flask, Pandas, Notion SDK, all Notion references.
**Added:** `csv-parse`, `iconv-lite`, `multer`, `source` + `currency` fields, `UploadPanel` component.
---
## Folder Structure
```
/volume2/docker/finance/finance-hub/
├── docker-compose.yml
├── .env
├── .env.example
├── .gitignore
├── backend/
│ ├── Dockerfile
│ ├── package.json
│ ├── prisma/
│ │ ├── schema.prisma
│ │ └── migrations/
│ │ ├── migration_lock.toml
│ │ └── 20260508_init/
│ │ └── migration.sql
│ └── src/
│ ├── index.js ← entry point (Authentik middleware wired here)
│ ├── auth.js ← Authentik header middleware (replaces JWT auth)
│ ├── parser.js ← SMS parser (copy verbatim from payments-logger)
│ ├── csvParser.js ← NEW: DSK CSV parser (port of Python dskuploader.py)
│ └── routes/
│ ├── payments.js ← existing routes + source/currency additions
│ └── upload.js ← NEW: POST /api/upload/csv
└── frontend/
├── Dockerfile
├── package.json
├── vite.config.js
├── tailwind.config.js
├── postcss.config.js
├── index.html
└── src/
├── main.jsx ← remove AuthProvider wrapper
├── index.css
├── App.jsx ← remove auth state, add Upload tab toggle
└── components/
├── FilterBar.jsx ← add source filter select
├── PaymentTable.jsx ← add Source badge column + currency display
├── PaymentCard.jsx ← minor source badge addition
├── PaymentList.jsx ← unchanged
└── UploadPanel.jsx ← NEW: drag-and-drop CSV upload UI
```
---
## Database Schema (Prisma)
File: `backend/prisma/schema.prisma`
```prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Payment {
id Int @id @default(autoincrement())
rawMessage String @map("raw_message")
date DateTime?
type String?
card String?
recipient String?
amount Float?
currency String? @default("EUR")
balance Float?
source Source @default(INGEST)
status Status @default(UNPROCESSED)
tags Tag[]
notifiedAt DateTime? @map("notified_at")
notifyPhone String? @map("notify_phone")
debitBgn Float? @map("debit_bgn")
creditBgn Float? @map("credit_bgn")
transactionType String? @map("transaction_type")
payerAccount String? @map("payer_account")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("payments")
}
model Tag {
id Int @id @default(autoincrement())
name String @unique
color String @default("#6b7280")
payments Payment[]
@@map("tags")
}
enum Status { UNPROCESSED SENT SKIPPED }
enum Source { INGEST UPLOAD }
```
**Key decisions:**
- No `User` model — Authentik owns identity.
- `currency`: `EUR` for SMS ingest, `BGN` for CSV uploads.
- `debitBgn`, `creditBgn`, `transactionType`, `payerAccount`: nullable CSV-only columns; INGEST rows store nulls. Avoids a union query for the unified list view.
- `balance` is always null for CSV rows (DSK export does not include running balance).
- Fresh consolidated migration — no data migration from reference apps required.
---
## API Routes
| Method | Path | Auth | Description |
|--------|------|------|-------------|
| GET | /api/health | public | Health check |
| POST | /api/payments/ingest | public | SMS or structured ingest (source=INGEST) |
| GET | /api/payments | required | List with filters/sort/pagination (+ source filter) |
| GET | /api/payments/meta/tags | required | All tags |
| GET | /api/payments/meta/filters | required | Filter options incl. `sources` array |
| GET | /api/payments/:id | required | Single payment |
| PATCH | /api/payments/:id | required | Update status |
| DELETE | /api/payments/:id | required | Delete |
| POST | /api/payments/:id/send | required | Send notification |
| POST | /api/payments/:id/skip | required | Skip |
| POST | /api/payments/:id/tags | required | Add/upsert tag |
| DELETE | /api/payments/:id/tags/:tagId | required | Remove tag |
| POST | /api/upload/csv | required | DSK CSV file upload (source=UPLOAD) |
---
## Key Implementation Details
### auth.js (replaces entire old auth module)
```js
const PUBLIC_PATHS = new Set(['/api/health', '/api/payments/ingest']);
function authentikMiddleware(req, res, next) {
if (PUBLIC_PATHS.has(req.path)) return next();
const username = req.headers['x-authentik-username'];
if (!username) return res.status(401).json({ error: 'Unauthorized' });
req.user = {
username,
email: req.headers['x-authentik-email'] || null,
groups: (req.headers['x-authentik-groups'] || '').split(',').map(g => g.trim()).filter(Boolean),
};
next();
}
module.exports = { authentikMiddleware };
```
### csvParser.js (port of dskuploader.py)
- `iconv-lite` decodes buffer as cp1251 (DSK Bank export encoding), falls back to UTF-8
- `csv-parse` parses the decoded text with `columns: true`
- Columns: `Дата`, `Вид на трансакцията`, `Основание`, `Дебит BGN`, `Кредит BGN`, `Наредител/Получател`, `Номер сметка на наредителя / получателя`
- Card extraction: regex `/^\d{6}x{6}\d{4}$/` on first token of `Основание`
- Skips rows where `Вид на трансакцията === 'ТРАНСФЕР СОБСТВЕНИ СМЕТКИ'`
- Auto-tags via keyword rules (ЗАПЛАТА→Salary, LIDL→Groceries, NETFLIX→Subscriptions, etc.) — same logic as Python `generate_tags()`
- Returns `{ rows: PaymentData[], skipped: number, errors: string[] }`
### payments.js changes from payments-logger
1. Add `source: 'INGEST'` and `currency` to the `/ingest` create call
2. Add `source` to the `GET /` where clause filter
3. Add `sources` to `meta/filters` response
4. Currency-aware amount formatting in notification message
5. Remove all JWT/auth references (no `/auth/register`, `/auth/login`)
### upload.js (new)
- `multer` memory storage, max 10 files × 10 MB
- Calls `parseDskCsv(buffer)` per file
- Upserts tags via `prisma.tag.upsert` then connects
- Returns `{ imported, skipped, errors, payments[] }`
### Frontend changes
- **Delete**: `auth.js`, `AuthProvider.jsx`
- **main.jsx**: Remove `<AuthProvider>` wrapper
- **App.jsx**: Replace `authFetch` with plain `fetch` (Authentik session cookie travels automatically); logout → `window.location.href = '/outpost.goauthentik.io/sign_out'`; add "Payments" / "Upload CSV" tab toggle
- **FilterBar.jsx**: Add source `<select>` (All / SMS Ingest / CSV Upload); widen grid to 5 cols
- **PaymentTable.jsx**: Add `Source` column with `SMS` (indigo) / `CSV` (emerald) badge; show `${amount} ${currency}` in amount cell
- **UploadPanel.jsx** (new): Drag-and-drop zone + file list + import button + result summary with error accordion; calls `POST /api/upload/csv` with `FormData`
---
## Docker Compose
```yaml
services:
db:
image: postgres:16-alpine
environment: { POSTGRES_USER: finance, POSTGRES_PASSWORD: [PASSWORD] POSTGRES_DB: finance_hub }
volumes: [pgdata:/var/lib/postgresql/data]
healthcheck: { test: pg_isready -U finance -d finance_hub, interval: 5s }
backend:
build: ./backend
environment:
DATABASE_URL: [CONNECTION_STRING]
PORT: "3001"
NOTIFIER_URL: ${NOTIFIER_URL}
NOTIFIER_CHANNEL: ${NOTIFIER_CHANNEL:-viber}
NOTIFY_DEFAULT_PHONE: ${NOTIFY_DEFAULT_PHONE}
TZ: ${TZ:-Europe/Sofia}
ports: ["${BACKEND_PORT:-3001}:3001"]
depends_on: { db: { condition: service_healthy } }
frontend:
build: ./frontend
ports: ["${FRONTEND_PORT:-5175}:5173"]
depends_on: [backend]
volumes: { pgdata: }
```
**NPM setup:** Frontend port proxied through Authentik forward auth. Backend port exposed separately (unprotected) so the public `/api/payments/ingest` remains reachable by iOS Shortcuts / SMS gateways without login.
---
## Environment Variables (.env)
```bash
[ENV_SECRET]
NOTIFIER_URL=[URL_WITH_CREDENTIALS] @default(autoincrement())
rawMessage String @map("raw_message")
date DateTime?
type String?
card String?
recipient String?
amount Float?
currency String? @default("EUR")
balance Float?
source Source @default(INGEST)
status Status @default(UNPROCESSED)
tags Tag[]
notifiedAt DateTime? @map("notified_at")
notifyPhone String? @map("notify_phone")
debitBgn Float? @map("debit_bgn")
creditBgn Float? @map("credit_bgn")
transactionType String? @map("transaction_type")
payerAccount String? @map("payer_account")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("payments")
}
model Tag {
id Int @id @default(autoincrement())
name String @unique
color String @default("#6b7280")
payments Payment[]
@@map("tags")
}
enum Status {
UNPROCESSED
SENT
SKIPPED
}
enum Source {
INGEST
UPLOAD
}
Write
migration.sql
migration.sql
55 lines
-- CreateEnum
CREATE TYPE "Status" AS ENUM ('UNPROCESSED', 'SENT', 'SKIPPED');
CREATE TYPE "Source" AS ENUM ('INGEST', 'UPLOAD');
-- CreateTable
CREATE TABLE "payments" (
"id" SERIAL PRIMARY KEY,
"raw_message" TEXT NOT NULL,
"date" TIMESTAMP(3),
"type" TEXT,
"card" TEXT,
"recipient" TEXT,
"amount" DOUBLE PRECISION,
"currency" TEXT DEFAULT 'EUR',
"balance" DOUBLE PRECISION,
"source" "Source" NOT NULL DEFAULT 'INGEST',
"status" "Status" NOT NULL DEFAULT 'UNPROCESSED',
"notified_at" TIMESTAMP(3),
"notify_phone" TEXT,
"debit_bgn" DOUBLE PRECISION,
"credit_bgn" DOUBLE PRECISION,
"transaction_type" TEXT,
"payer_account" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- CreateTable
CREATE TABLE "tags" (
"id" SERIAL PRIMARY KEY,
"name" TEXT NOT NULL,
"color" TEXT NOT NULL DEFAULT '#6b7280'
);
-- CreateUniqueIndex
CREATE UNIQUE INDEX "tags_name_key" ON "tags"("name");
-- CreateTable (M2M join)
CREATE TABLE "_PaymentToTag" (
"A" INTEGER NOT NULL,
"B" INTEGER NOT NULL,
CONSTRAINT "_PaymentToTag_AB_pkey" PRIMARY KEY ("A", "B")
);
CREATE INDEX "_PaymentToTag_B_index" ON "_PaymentToTag"("B");
-- AddForeignKey
ALTER TABLE "_PaymentToTag"
ADD CONSTRAINT "_PaymentToTag_A_fkey"
FOREIGN KEY ("A") REFERENCES "payments"("id") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "_PaymentToTag"
ADD CONSTRAINT "_PaymentToTag_B_fkey"
FOREIGN KEY ("B") REFERENCES "tags"("id") ON DELETE CASCADE ON UPDATE CASCADE;
Write
migration_lock.toml
migration_lock.toml
4 lines
# Please do not edit this file manually
# It should be added in your version-control system (e.g., Git)
provider = "postgresql"
Update Todos
Create folder structure and root config files
Write backend Prisma schema and migration
Write backend package.json and Dockerfile
Write backend src files (auth, parser, csvParser, index)
Write backend routes (payments.js, upload.js)
Write frontend config files
Write frontend React components
Build and verify with docker compose
Write
package.json
package.json
26 lines
{
"name": "finance-hub-backend",
"version": "1.0.0",
"main": "src/index.js",
"scripts": {
"start": "node src/index.js",
"dev": "nodemon src/index.js",
"prisma:generate": "prisma generate",
"prisma:migrate": "prisma migrate deploy"
},
"dependencies": {
"@prisma/client": "^5.22.0",
"cors": "^2.8.5",
"csv-parse": "^5.5.6",
"express": "^4.21.1",
"express-rate-limit": "^7.4.0",
"iconv-lite": "^0.6.3",
"morgan": "^1.10.0",
"multer": "^1.4.5-lts.1"
},
"devDependencies": {
"nodemon": "^3.1.7",
"prisma": "^5.22.0"
}
}
Write
Dockerfile
Dockerfile
18 lines
FROM node:20-alpine
RUN apk add --no-cache openssl
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm install
COPY prisma ./prisma
RUN npx prisma generate
COPY src ./src
EXPOSE 3001
CMD ["sh", "-c", "npx prisma migrate deploy && node src/index.js"]
Update Todos
Create folder structure and root config files
Write backend Prisma schema and migration
Write backend package.json and Dockerfile
Write backend src files (auth, parser, csvParser, index)
Write backend routes (payments.js, upload.js)
Write frontend config files
Write frontend React components
Build and verify with docker compose
Write
auth.js
auth.js
27 lines
const PUBLIC_PATHS = new Set([
'/api/health',
'/api/payments/ingest',
]);
function authentikMiddleware(req, res, next) {
if (PUBLIC_PATHS.has(req.path)) return next();
const username = req.headers['x-authentik-username'];
if (!username) {
return res.status(401).json({ error: 'Unauthorized — missing Authentik session' });
}
req.user = {
username,
email: req.headers['x-authentik-email'] || null,
groups: (req.headers['x-authentik-groups'] || '')
.split(',')
.map(g => g.trim())
.filter(Boolean),
};
next();
}
module.exports = { authentikMiddleware };
Write...
|
13228
|
NULL
|
NULL
|
NULL
|
|
13300
|
587
|
34
|
2026-05-09T15:18:18.354612+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339898354_m1.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
remote
No Problems
0
0
Notifications
Sign In
Sign In
Select an option to open a Remote Window
7 Results
Connect to Host...Remote-SSH
Connect to Host...
Remote-SSH
Connect Current Window to Host...
Connect Current Window to Host...
Continue Working in vscode.devRemote Repositories
Continue Working in vscode.dev
Remote Repositories
TunnelInstall
Tunnel
Install
Dev Container
Dev Container
GitHub Codespace
GitHub Codespace
Remote Repository
Remote Repository...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Open Chat","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Select an option to open a Remote Window","depth":16,"on_screen":true,"placeholder":"Select an option to open a Remote Window","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7 Results","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Connect to Host...Remote-SSH","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect to Host...","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Remote-SSH","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect Current Window to Host...","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect Current Window to Host...","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Continue Working in vscode.devRemote Repositories","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Continue Working in vscode.dev","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Remote Repositories","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"TunnelInstall","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Tunnel","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Install","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dev Container","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dev Container","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"GitHub Codespace","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"GitHub Codespace","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Remote Repository","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Remote Repository","depth":19,"on_screen":true,"role_description":"text"}]...
|
-8891789862553659965
|
-8683641963135187910
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
remote
No Problems
0
0
Notifications
Sign In
Sign In
Select an option to open a Remote Window
7 Results
Connect to Host...Remote-SSH
Connect to Host...
Remote-SSH
Connect Current Window to Host...
Connect Current Window to Host...
Continue Working in vscode.devRemote Repositories
Continue Working in vscode.dev
Remote Repositories
TunnelInstall
Tunnel
Install
Dev Container
Dev Container
GitHub Codespace
GitHub Codespace
Remote Repository
Remote Repository...
|
13297
|
NULL
|
NULL
|
NULL
|
|
13375
|
590
|
34
|
2026-05-09T15:23:19.290376+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778340199290_m2.jpg...
|
Firefox
|
Finance Hub — Personal
|
True
|
finance-hub.lakylak.xyz/outpost.goauthentik.io/sig finance-hub.lakylak.xyz/outpost.goauthentik.io/sign_out...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Inbox (2) - [EMAIL] - Gmail
Inbox (2) - [EMAIL] - Gmail
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Close tab
Select: transactions - db - Adminer
Select: transactions - db - Adminer
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
VIVACOM
VIVACOM
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
VIVACOM
VIVACOM
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Claude Code | Claude Platform
Claude Code | Claude Platform
Claude
Claude
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Finance Hub
Finance Hub
187
transaction
s
Payments
Payments
Upload CSV
Upload CSV
Refresh
Display settings
Sign out
Filters
Filters
Search
Recipient, description…
Source
Status
Type
Tag
From date
dd
/
mm
/
yyyy
Calendar
To date
dd
/
mm
/
yyyy
Calendar
187
transaction
s
(balance alerts hidden)
·
Total:
10,250.48
EUR
DATE
RECIPIENT
AMOUNT
TAGS
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
09 May 2026, 15:02
VIADENTAL, SOFIA, BG
Raw data
124.00 EUR
Send
Send
Skip
Skip
Delete
09 May 2026, 14:54
VIADENTAL, SOFIA, BG
Raw data
117.00 EUR
Send
Send
Skip
Skip
Delete
08 May 2026, 19:32
LIDL BALGARIYA EOOD, SOFIYA, BGR
Raw data
67.81 EUR
Send
Send
Skip
Skip
Delete
08 May 2026, 18:45
Sinsay, Sofia, BG
Raw data
5.02 EUR
Send
Send
Skip
Skip
Delete
08 May 2026, 18:35
TEMA RETAIL BG EOOD, SOFIA, BG
Raw data
15.46 EUR
Send
Send
Skip
Skip
Delete
08 May 2026, 18:07
DM BULGARIA EOOD, SOFIYA, BG
Raw data
9.04 EUR
Send
Send
Skip
Skip
Delete
08 May 2026, 10:00
DSK ATM, SOFIA, BG
Raw data
200.00 EUR
Send
Send
Skip
Skip
Delete
07 May 2026, 09:02
CBA EKO MARKET, SOFIA, BG
Raw data
5.51 EUR
Send
Send
Skip
Skip
Delete
06 May 2026, 19:02
CBA ECO MARKET, SOFIA, BG
Raw data
5.93 EUR
Send
Send
Skip
Skip
Delete
06 May 2026, 18:40
FANTASTICO GROUP LTD, SOFIA, BG
Raw data
13.02 EUR
Send
Send
Skip
Skip
Delete
06 May 2026, 17:19
TAXI 065, SOFIA, BG
Raw data
17.00 EUR
Send
Send
Skip
Skip
Delete
06 May 2026, 13:16
Lagardere Travel R
Raw data
5.49 EUR
Send
Send
Skip
Skip
Delete
05 May 2026, 18:55
dennikn
Raw data
7.99 EUR
Send
Send
Skip
Skip
Delete
05 May 2026, 18:05
Dr
Raw data
1.28 EUR...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.080784574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DNS / Nameservers | Hostinger","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DNS / Nameservers | Hostinger","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.053856384,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.040724736,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.03756649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.11469415,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AFFiNE - All In One KnowledgeOS","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.05851064,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All docs · AFFiNE","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.029587766,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Payments Logger","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Payments Logger","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.030086435,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Inbox (2) - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox (2) - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.07513298,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"(25) Quora","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(25) Quora","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.018949468,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Location Logger","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":5,"bounds":{"left":0.013297873,"top":0.4884278,"width":0.028091755,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"bounds":{"left":0.013297873,"top":0.5211492,"width":0.021609042,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Finance Hub","depth":5,"bounds":{"left":0.013297873,"top":0.55387074,"width":0.021609042,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.10139628,"top":0.54988027,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Select: transactions - db - Adminer","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select: transactions - db - Adminer","depth":5,"bounds":{"left":0.013297873,"top":0.5865922,"width":0.061170213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":5,"bounds":{"left":0.013297873,"top":0.61931366,"width":0.09059176,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":5,"bounds":{"left":0.013297873,"top":0.6520351,"width":0.113696806,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"bounds":{"left":0.0,"top":0.6735834,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIVACOM","depth":5,"bounds":{"left":0.013297873,"top":0.6847566,"width":0.016788565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":4,"bounds":{"left":0.0,"top":0.70630485,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":5,"bounds":{"left":0.013297873,"top":0.71747804,"width":0.10239362,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"bounds":{"left":0.0,"top":0.7390263,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIVACOM","depth":5,"bounds":{"left":0.013297873,"top":0.7501995,"width":0.016788565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":4,"bounds":{"left":0.0,"top":0.7717478,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":5,"bounds":{"left":0.013297873,"top":0.782921,"width":0.098902926,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code | Claude Platform","depth":4,"bounds":{"left":0.0,"top":0.8044693,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code | Claude Platform","depth":5,"bounds":{"left":0.013297873,"top":0.8156425,"width":0.053357713,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude","depth":4,"bounds":{"left":0.0,"top":0.83719075,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude","depth":5,"bounds":{"left":0.013297873,"top":0.84836394,"width":0.012134309,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.87150836,"width":0.108211435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Finance Hub","depth":8,"bounds":{"left":0.13829787,"top":0.0622506,"width":0.032081116,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Finance Hub","depth":9,"bounds":{"left":0.13829787,"top":0.06264964,"width":0.032081116,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"187","depth":9,"bounds":{"left":0.13829787,"top":0.07861133,"width":0.0066489363,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"transaction","depth":9,"bounds":{"left":0.14494681,"top":0.07861133,"width":0.022273935,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"s","depth":9,"bounds":{"left":0.16722074,"top":0.07861133,"width":0.0021609042,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Payments","depth":8,"bounds":{"left":0.27310506,"top":0.06384677,"width":0.036070477,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Payments","depth":10,"bounds":{"left":0.28374335,"top":0.0698324,"width":0.02144282,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload CSV","depth":8,"bounds":{"left":0.3098404,"top":0.06384677,"width":0.04105718,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Upload CSV","depth":10,"bounds":{"left":0.32047874,"top":0.0698324,"width":0.02642952,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Refresh","depth":8,"bounds":{"left":0.45345744,"top":0.06384677,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Display settings","depth":8,"bounds":{"left":0.4660904,"top":0.06384677,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Sign out","depth":8,"bounds":{"left":0.4787234,"top":0.06384677,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Filters","depth":9,"bounds":{"left":0.1299867,"top":0.12849163,"width":0.3537234,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Filters","depth":11,"bounds":{"left":0.13796543,"top":0.12968874,"width":0.013630319,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search","depth":10,"bounds":{"left":0.1299867,"top":0.16480447,"width":0.013297873,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Recipient, description…","depth":10,"bounds":{"left":0.1299867,"top":0.18036711,"width":0.3537234,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Source","depth":10,"bounds":{"left":0.1299867,"top":0.22067039,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Status","depth":10,"bounds":{"left":0.21941489,"top":0.22067039,"width":0.012466756,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Type","depth":10,"bounds":{"left":0.30884308,"top":0.22067039,"width":0.009474734,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tag","depth":10,"bounds":{"left":0.39827126,"top":0.22067039,"width":0.006981383,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"From date","depth":10,"bounds":{"left":0.1299867,"top":0.27414206,"width":0.019448139,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dd","depth":11,"bounds":{"left":0.13530585,"top":0.2980846,"width":0.0056515955,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":10,"bounds":{"left":0.1419548,"top":0.2980846,"width":0.0013297872,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mm","depth":11,"bounds":{"left":0.14428191,"top":0.2980846,"width":0.007978723,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":10,"bounds":{"left":0.15325798,"top":0.2980846,"width":0.0013297872,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"yyyy","depth":11,"bounds":{"left":0.15558511,"top":0.2980846,"width":0.009973404,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":10,"bounds":{"left":0.29371676,"top":0.2988827,"width":0.006150266,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"To date","depth":10,"bounds":{"left":0.30884308,"top":0.27414206,"width":0.014295213,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dd","depth":11,"bounds":{"left":0.31416222,"top":0.2980846,"width":0.0056515955,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":10,"bounds":{"left":0.32081118,"top":0.2980846,"width":0.0013297872,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mm","depth":11,"bounds":{"left":0.3231383,"top":0.2980846,"width":0.007978723,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":10,"bounds":{"left":0.33211437,"top":0.2980846,"width":0.0013297872,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"yyyy","depth":11,"bounds":{"left":0.33444148,"top":0.2980846,"width":0.009973404,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":10,"bounds":{"left":0.47257313,"top":0.2988827,"width":0.006150266,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"187","depth":9,"bounds":{"left":0.1299867,"top":0.35953712,"width":0.007978723,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"transaction","depth":9,"bounds":{"left":0.13796543,"top":0.35953712,"width":0.025598405,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"s","depth":9,"bounds":{"left":0.16356383,"top":0.35953712,"width":0.0023271276,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(balance alerts hidden)","depth":9,"bounds":{"left":0.16722074,"top":0.36113328,"width":0.04338431,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":9,"bounds":{"left":0.2159242,"top":0.35953712,"width":0.0013297872,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Total:","depth":9,"bounds":{"left":0.22257313,"top":0.35953712,"width":0.013131649,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10,250.48","depth":9,"bounds":{"left":0.2357048,"top":0.35953712,"width":0.023936171,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":9,"bounds":{"left":0.26097074,"top":0.36113328,"width":0.007978723,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":13,"bounds":{"left":0.1299867,"top":0.40343177,"width":0.011136968,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RECIPIENT","depth":13,"bounds":{"left":0.2017952,"top":0.40343177,"width":0.023105053,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AMOUNT","depth":13,"bounds":{"left":0.3324468,"top":0.40343177,"width":0.019448139,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TAGS","depth":13,"bounds":{"left":0.38081783,"top":0.40343177,"width":0.011469414,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.4329609,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.4329609,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.43415803,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.4329609,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.4301676,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.43375897,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.4293695,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.43375897,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.4293695,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.46727854,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.46727854,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.46847567,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.46727854,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.46448523,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.46807662,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.46368715,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.46807662,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.46368715,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.50159615,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.50159615,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.5027933,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.50159615,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.49880287,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.50239426,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.4980048,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.50239426,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.4980048,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.5359138,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.5359138,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.5371109,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.5359138,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.5331205,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.5367119,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.5323224,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.5367119,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.5323224,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.57023144,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.57023144,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.5714286,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.57023144,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.5674381,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.57102954,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.5666401,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.57102954,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.5666401,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.6045491,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.6045491,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.6057462,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.6045491,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.6017558,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.60534716,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.6009577,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.60534716,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.6009577,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.6388667,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.6388667,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.6400638,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.6388667,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.6360734,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.6396648,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.63527536,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.6396648,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.63527536,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.67318434,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.67318434,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.6743815,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.67318434,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.6703911,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.67398244,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.669593,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.67398244,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.669593,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.707502,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.707502,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.7086991,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.707502,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.7047087,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.70830005,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.7039106,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.70830005,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.7039106,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.7418196,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.7418196,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.7430168,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.7418196,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.7390263,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.7426177,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.73822826,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.7426177,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.73822826,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.7761373,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.7761373,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.7773344,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.7761373,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.773344,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.77693534,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.7725459,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.77693534,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.7725459,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.8104549,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.8104549,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.81165206,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.8104549,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.8076616,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.811253,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.80686355,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.811253,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.80686355,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.8447725,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.8447725,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.8459697,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.8447725,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.84197927,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.8455706,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.84118116,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.8455706,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.84118116,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.8790902,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.8790902,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.8802873,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.8790902,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.8762969,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.8798883,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.87549883,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.8798883,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.87549883,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.9134078,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.9134078,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.91460496,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.9134078,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.91061455,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.9142059,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.90981644,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.9142059,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.90981644,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.9477255,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.9477255,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.9489226,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.9477255,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.94493216,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.9485235,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.94413406,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.9485235,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.94413406,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":0.9820431,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":0.9820431,"width":0.0039893617,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":0.98324025,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":0.9820431,"width":0.004155585,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":0.9792498,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":0.9828412,"width":0.009807181,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":0.9784517,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":0.9828412,"width":0.00831117,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":0.9784517,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":1.0,"width":0.0039893617,"height":-0.01636076},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":1.0,"width":0.0039893617,"height":-0.01636076},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":1.0,"width":0.004654255,"height":-0.01755786},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":1.0,"width":0.004155585,"height":-0.01636076},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":1.0,"width":0.021775266,"height":-0.013567448},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":1.0,"width":0.009807181,"height":-0.017158866},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":1.0,"width":0.020944148,"height":-0.0127693415},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":1.0,"width":0.00831117,"height":-0.017158866},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":1.0,"width":0.008643617,"height":-0.0127693415},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":1.0,"width":0.0039893617,"height":-0.050678372},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":1.0,"width":0.0039893617,"height":-0.050678372},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":1.0,"width":0.004654255,"height":-0.051875472},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":1.0,"width":0.004155585,"height":-0.050678372},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":1.0,"width":0.021775266,"height":-0.04788506},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":1.0,"width":0.009807181,"height":-0.05147648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":1.0,"width":0.020944148,"height":-0.047086954},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":1.0,"width":0.00831117,"height":-0.05147648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":1.0,"width":0.008643617,"height":-0.047086954},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.1299867,"top":1.0,"width":0.0039893617,"height":-0.084995985},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"bounds":{"left":0.2017952,"top":1.0,"width":0.0039893617,"height":-0.084995985},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"bounds":{"left":0.20711437,"top":1.0,"width":0.004654255,"height":-0.086193085},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"bounds":{"left":0.3324468,"top":1.0,"width":0.004155585,"height":-0.084995985},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"bounds":{"left":0.40757978,"top":1.0,"width":0.021775266,"height":-0.08220267},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"bounds":{"left":0.4162234,"top":1.0,"width":0.009807181,"height":-0.08579409},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"bounds":{"left":0.43068483,"top":1.0,"width":0.020944148,"height":-0.081404686},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"bounds":{"left":0.4396609,"top":1.0,"width":0.00831117,"height":-0.08579409},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"bounds":{"left":0.45295876,"top":1.0,"width":0.008643617,"height":-0.081404686},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"—","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"—","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"09 May 2026, 15:02","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VIADENTAL, SOFIA, BG","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"124.00 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"09 May 2026, 14:54","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"VIADENTAL, SOFIA, BG","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"117.00 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"08 May 2026, 19:32","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LIDL BALGARIYA EOOD, SOFIYA, BGR","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"67.81 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"08 May 2026, 18:45","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sinsay, Sofia, BG","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5.02 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"08 May 2026, 18:35","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TEMA RETAIL BG EOOD, SOFIA, BG","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"15.46 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"08 May 2026, 18:07","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DM BULGARIA EOOD, SOFIYA, BG","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"9.04 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"08 May 2026, 10:00","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DSK ATM, SOFIA, BG","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"200.00 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"07 May 2026, 09:02","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CBA EKO MARKET, SOFIA, BG","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5.51 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"06 May 2026, 19:02","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CBA ECO MARKET, SOFIA, BG","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5.93 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"06 May 2026, 18:40","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FANTASTICO GROUP LTD, SOFIA, BG","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"13.02 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"06 May 2026, 17:19","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TAXI 065, SOFIA, BG","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"17.00 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"06 May 2026, 13:16","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lagardere Travel R","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5.49 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"05 May 2026, 18:55","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dennikn","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7.99 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Send","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Send","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Skip","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"05 May 2026, 18:05","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dr","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Raw data","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1.28 EUR","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
882909258826026814
|
1873547281763017697
|
visual_change
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Inbox (2) - [EMAIL] - Gmail
Inbox (2) - [EMAIL] - Gmail
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Close tab
Select: transactions - db - Adminer
Select: transactions - db - Adminer
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
VIVACOM
VIVACOM
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
VIVACOM
VIVACOM
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Claude Code | Claude Platform
Claude Code | Claude Platform
Claude
Claude
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Finance Hub
Finance Hub
187
transaction
s
Payments
Payments
Upload CSV
Upload CSV
Refresh
Display settings
Sign out
Filters
Filters
Search
Recipient, description…
Source
Status
Type
Tag
From date
dd
/
mm
/
yyyy
Calendar
To date
dd
/
mm
/
yyyy
Calendar
187
transaction
s
(balance alerts hidden)
·
Total:
10,250.48
EUR
DATE
RECIPIENT
AMOUNT
TAGS
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
—
—
Raw data
—
Send
Send
Skip
Skip
Delete
09 May 2026, 15:02
VIADENTAL, SOFIA, BG
Raw data
124.00 EUR
Send
Send
Skip
Skip
Delete
09 May 2026, 14:54
VIADENTAL, SOFIA, BG
Raw data
117.00 EUR
Send
Send
Skip
Skip
Delete
08 May 2026, 19:32
LIDL BALGARIYA EOOD, SOFIYA, BGR
Raw data
67.81 EUR
Send
Send
Skip
Skip
Delete
08 May 2026, 18:45
Sinsay, Sofia, BG
Raw data
5.02 EUR
Send
Send
Skip
Skip
Delete
08 May 2026, 18:35
TEMA RETAIL BG EOOD, SOFIA, BG
Raw data
15.46 EUR
Send
Send
Skip
Skip
Delete
08 May 2026, 18:07
DM BULGARIA EOOD, SOFIYA, BG
Raw data
9.04 EUR
Send
Send
Skip
Skip
Delete
08 May 2026, 10:00
DSK ATM, SOFIA, BG
Raw data
200.00 EUR
Send
Send
Skip
Skip
Delete
07 May 2026, 09:02
CBA EKO MARKET, SOFIA, BG
Raw data
5.51 EUR
Send
Send
Skip
Skip
Delete
06 May 2026, 19:02
CBA ECO MARKET, SOFIA, BG
Raw data
5.93 EUR
Send
Send
Skip
Skip
Delete
06 May 2026, 18:40
FANTASTICO GROUP LTD, SOFIA, BG
Raw data
13.02 EUR
Send
Send
Skip
Skip
Delete
06 May 2026, 17:19
TAXI 065, SOFIA, BG
Raw data
17.00 EUR
Send
Send
Skip
Skip
Delete
06 May 2026, 13:16
Lagardere Travel R
Raw data
5.49 EUR
Send
Send
Skip
Skip
Delete
05 May 2026, 18:55
dennikn
Raw data
7.99 EUR
Send
Send
Skip
Skip
Delete
05 May 2026, 18:05
Dr
Raw data
1.28 EUR...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
13873
|
620
|
34
|
2026-05-09T16:37:42.018158+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778344662018_m2.jpg...
|
Code
|
Implement Authentik inte… — finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 10 pending changes
10
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
mcp
scripts
.env
.env.example
M
.gitignore
M
docker-compose.yml
M
README.md
sms_export.json
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
.env.example, preview, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
# ── Database ───────────────────────────────────────────────────────────────────
[ENV_SECRET]
# ── Notifier service ──────────────────────────────────────────────────────────
NOTIFIER_URL=[URL_WITH_CREDENTIALS]
# Secret key — generate with: openssl rand -base64 36
[ENV_SECRET]
# Public URL authentik is reachable at (used for redirects and the outpost)
AUTHENTIK_HOST=[URL_WITH_CREDENTIALS] version 2>/dev/null && node --version
Copy code to clipboard
OUT
Exit code 127
Bash
Verify public path configuration
IN
# Check if the upload endpoints are really public
grep -n 'PUBLIC_PATHS\|upload\|ingest' /volume2/docker/finance/finance-hub/backend/src/auth.js
Copy code to clipboard
OUT
<tool_use_error>Cancelled: parallel tool call Bash(npm view @modelcontextprotocol/sdk versi…) errored</tool_use_error>
Bash
Check node version and MCP SDK latest
IN
node --version 2>/dev/null && python3 -c "import urllib.request; import json; d=json.loads(urllib.request.urlopen('[URL_WITH_CREDENTIALS] "^1.29.0"
},
"engines": {
"node": ">=18"
}
}
Write
server.js
server.js
236 lines
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from '@modelcontextprotocol/sdk/types.js';
const BASE_URL = (process.env.FINANCE_HUB_URL || '[URL_WITH_CREDENTIALS] '^1.29.0'}
Thinking
Thinking
Good. Now let me test the MCP server can at least start and call the health check:
Bash
Smoke test MCP server startup
IN
FINANCE_HUB_URL=http://localhost:3001 [ENV_SECRET] \
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | timeout 5 node server.js 2>/dev/null | head -3 || echo "NODE test (expected timeout on stdin wait)"
Copy code to clipboard
OUT
{"result":{"tools":[{"name":"list_transactions","description":"List finance transactions with optional filters. Returns paginated results including total amount for the filtered set.","inputSchema":{"type":"object","properties":{"page":{"type":"number","description":"Page number (default 1)"},"limit":{"type":"number","description":"Results per page, max 200 (default 50)"},"dateFrom":{"type":"string","description":"Start date YYYY-MM-DD (inclusive)"},"dateTo":{"type":"string","description":"End date YYYY-MM-DD (inclusive)"},"tag":{"type":"string","description":"Filter by tag name"},"recipient":{"type":"string","description":"Substring match on payee name"},"type":{"type":"string","description":"Transaction type: POS | ATM | WALLET"},"source":{"type":"string","description":"Import source: INGEST | UPLOAD"},"search":{"type":"string","description":"Full-text search across rawMessage and recipient"},"hideBalanceAlerts":{"type":"boolean","description":"Exclude balance-notification SMS (default false)"},"sortBy":{"type":"string","description":"Sort field: date | amount | recipient | createdAt"},"sortDir":{"type":"string","description":"asc or desc (default desc)"}}}},{"name":"spending_by_tag","description":"Aggregate spending totals by tag for a date range. Fetches up to 200 transactions and groups them. Good for monthly summaries.","inputSchema":{"type":"object","properties":{"dateFrom":{"type":"string","description":"Start date YYYY-MM-DD"},"dateTo":{"type":"string","description":"End date YYYY-MM-DD"}}}},{"name":"get_transaction","description":"Get a single transaction by its numeric ID.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"number","description":"Transaction import ID"}}}},{"name":"list_tags","description":"List all available tags with their colors.","inputSchema":{"type":"object","properties":{}}},{"name":"add_tag","description":"Add a tag to a transaction. Creates the tag globally if it does not exist.","inputSchema":{"type":"object","required":["id","name"],"properties":{"id":{"type":"number","description":"Transaction ID"},"name":{"type":"string","description":"Tag name (e.g. \"Groceries\")"},"color":{"type":"string","description":"Hex color (e.g. \"#22c55e\"). Optional — auto-assigned if omitted."}}}},{"name":"remove_tag","description":"Remove a tag from a transaction.","inputSchema":{"type":"object","required":["id","tagId"],"properties":{"id":{"type":"number","description":"Transaction ID"},"tagId":{"type":"number","description":"Tag ID (from list_tags or the transaction object)"}}}},{"name":"health_check","description":"Check Finance Hub backend connectivity and database status.","inputSchema":{"type":"object","properties":{}}}]},"jsonrpc":"2.0","id":1}
Thinking
Thinking
MCP server responds correctly. Now test an actual tool call:
Bash
Test MCP health_check tool against live backend
IN
\
printf '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}\n{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"health_check","arguments":{}}}\n' | \
FINANCE_HUB_URL=http://localhost:3001 [ENV_SECRET] \
timeout 5 node server.js 2>/dev/null | tail -1 | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['result']['content'][0]['text'])"
Copy code to clipboard
OUT
{
"status": "ok",
"timestamp": "2026-05-09T16:19:09.977Z",
"storage": {
"type": "PostgreSQL",
"host": "db",
"database": "finance_hub"
}
}
Bash
Rebuild backend with API key auth changes
IN
# Test the API key auth directly against the backend (backend still has DEV_BYPASS_AUTH=true, need to restart first)
# First rebuild with the new code
cd /volume2/docker/finance/finance-hub && docker compose up -d --build backend 2>&1 | tail -8
Copy code to clipboard
OUT
time="2026-05-09T19:19:13+03:00" level=warning msg="/volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete"
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dfinance-hub%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied
Bash
Rebuild backend with sudo
IN
sudo docker compose -f /volume2/docker/finance/finance-hub/docker-compose.yml up -d --build backend 2>&1 | tail -10
Copy code to clipboard
OUT
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
sudo: a password is required
Thinking
Thinking
Docker needs sudo+password. Let me verify the auth changes are correct by testing the logic directly:
Bash
Unit test the auth middleware logic
IN
node - << 'EOF'
// Simulate the auth middleware logic
const [ENV_SECRET];
process.env.API_KEY = API_KEY;
const { authentikMiddleware } = require('/volume2/docker/finance/finance-hub/backend/src/auth.js');
function testReq(path, headers = {}) {
const res = { status(code) { this.code = code; return this; }, json(body) { return body; } };
const req = { path, headers };
let passed = false;
authentikMiddleware(req, res, () => { passed = true; });
return { passed, code: res.code, user: req.user };
}
// Public path — no auth needed
let r = testReq('/api/health', {});
console.assert(r.passed, 'health should be public');
console.log('✓ /api/health is public');
// Valid API key
r = testReq('/api/payments', { authorization: `Bearer ${API_KEY}` });
console.assert(r.passed, 'valid key should pass');
console.assert(r.user.username === 'api-key', 'api user');
console.log('✓ valid API key passes');
// Wrong API key
r = testReq('/api/payments', { authorization: 'Bearer wrongkey' });
console.assert(!r.passed, 'wrong key should fail');
console.assert(r.code === 401, '401 on bad key');
console.log('✓ wrong API key returns 401');
// No auth + no bypass + no authentik header
process.env.DEV_BYPASS_AUTH = 'false';
r = testReq('/api/payments', {});
console.assert(!r.passed && r.code === 401, 'no creds → 401');
console.log('✓ no credentials returns 401');
// Upload endpoints no longer public
r = testReq('/api/upload/csv', {});
console.assert(!r.passed && r.code === 401, 'upload/csv requires auth');
console.log('✓ /api/upload/csv now requires auth (was public, now fixed)');
// Authentik header pass-through
r = testReq('/api/payments', { 'x-authentik-username': 'lukastest', 'x-authentik-email': '[EMAIL]' });
console.assert(r.passed && r.user.username === 'lukastest', 'authentik header works');
console.log('✓ Authentik X-authentik-username header works');
console.log('\nAll auth tests passed.');
EOF
Copy code to clipboard
OUT
✓ /api/health is public
✓ valid API key passes
✓ wrong API key returns 401
✓ no credentials returns 401
✓ /api/upload/csv now requires auth (was public, now fixed)
✓ Authentik X-authentik-username header works
All auth tests passed.
All auth cases pass. Now test the MCP spending_by_tag tool against the live backend (with DEV_BYPASS_AUTH still on):
Bash
Test spending_by_tag MCP tool against live backend
IN
cd /volume2/docker/finance/finance-hub/mcp && \
printf '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}\n{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"spending_by_tag","arguments":{"dateFrom":"2026-05-01","dateTo":"2026-05-09"}}}\n' | \
FINANCE_HUB_URL=http://localhost:3001 [ENV_SECRET] \
timeout 8 node server.js 2>/dev/null | grep '"id":2' | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['result']['content'][0]['text'][:500])"
Copy code to clipboard
OUT
{
"period": {
"from": "2026-05-01",
"to": "2026-05-09"
},
"totalTransactions": 36,
"breakdown": [
{
"tag": "Bills",
"total": 117.9,
"count": 6
},
{
"tag": "(untagged)",
"total": 1153.87,
"count": 22
}
]
}
MCP tools work correctly against real data. Let me write the Claude desktop config example and the
.gitignore
for the mcp dir:
Write
claude_desktop_config.example.json
claude_desktop_config.example.json
14 lines
{
"_comment": "Add this block to ~/.config/claude/claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json)",
"mcpServers": {
"finance-hub": {
"command": "node",
"args": ["/volume2/docker/finance/finance-hub/mcp/server.js"],
"env": {
"FINANCE_HUB_URL": "http://localhost:3001",
"FINANCE_HUB_API_KEY": "94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c"
}
}
}
}
Write
.gitignore
.gitignore
2 lines
node_modules/
Update Todos
Fix auth.js: add API key support + remove upload endpoints from PUBLIC_PATHS
Update index.js: add CORS origin restriction via env var
Update .env and .env.example with API_KEY variable
Build MCP server (stdio, Claude desktop compatible)
Test: restart backend, verify API key auth and MCP connection
Now let me save relevant project context to memory:
Read
MEMORY.md
MEMORY.md
Write
MEMORY.md
MEMORY.md
4 lines
# Memory Index
- [project_finance_hub.md](project_finance_hub.md) — Finance Hub architecture, auth design, MCP server, API key setup
Write
project_finance_hub.md
project_finance_hub.md
35 lines
---
name: Finance Hub project state
description: Architecture, auth design, API key, MCP server location and tools for the finance-hub project
type: project
---
Finance Hub is a personal finance tracker at `/volume2/docker/finance/finance-hub/`.
**Running services** (as of 2026-05-09):
- Backend: port 3001 (Express/Prisma, PostgreSQL)
- Frontend: port 5175 (React/Vite)
- Adminer: port 8092
- Authentik: port 9100 (auth.lakylak.xyz, tag 2026.2.1)
**Auth design:**
- Production: NPM (Nginx Proxy Manager) + Authentik forward-auth outpost → injects `X-authentik-username` header
- `DEV_BYPASS_AUTH=true` is currently set in `.env` — app runs without real auth
- API key auth added: `Authorization: Bearer <API_KEY>` bypasses Authentik header check (used by MCP/scripts)
- API_KEY in `.env`: `94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c`
**Public endpoints** (no auth): `/api/health`, `/api/payments/ingest`
**Security fix applied (2026-05-09):** Removed `/api/upload/csv` and `/api/upload/preview` from PUBLIC_PATHS — they were incorrectly public.
**MCP server:** `/volume2/docker/finance/finance-hub/mcp/server.js`
- Stdio transport, works with Claude desktop
- Tools: list_transactions, spending_by_tag, get_transaction, list_tags, add_tag, remove_tag, health_check
- Env: FINANCE_HUB_URL, FINANCE_HUB_API_KEY
- Config example: `mcp/claude_desktop_config.example.json`
**To enable real Authentik auth:** Set `DEV_BYPASS_AUTH=false` in `.env`, configure NPM proxy host for finance-hub w...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 10 pending changes","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":22,"bounds":{"left":0.00831117,"top":0.1452514,"width":0.003656915,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00831117,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.009973404,"top":0.14604948,"width":0.0023271276,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.039228722,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.039228722,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":17,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.036901597,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.02825798,"top":0.096568234,"width":0.0066489363,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.026928192,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.024268618,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.13168396,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.027593086,"top":0.13168396,"width":0.022938829,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.13168396,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"bounds":{"left":0.028590426,"top":0.14844373,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.03125,"top":0.14924182,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"bounds":{"left":0.028590426,"top":0.1660016,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.16679968,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.03025266,"top":0.16679968,"width":0.015625,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.18355946,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"mcp","depth":27,"bounds":{"left":0.028590426,"top":0.18355946,"width":0.008643617,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.18435754,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.20111732,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"scripts","depth":27,"bounds":{"left":0.028590426,"top":0.20111732,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.030917553,"top":0.2019154,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.21707901,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.028590426,"top":0.21867518,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.029920213,"top":0.21947326,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"bounds":{"left":0.028590426,"top":0.23623304,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.029920213,"top":0.23703113,"width":0.024933511,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.23703113,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.028590426,"top":0.25379092,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.254589,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.029920213,"top":0.254589,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.254589,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.028590426,"top":0.27134877,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.03125,"top":0.27214685,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.27214685,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.28731045,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":27,"bounds":{"left":0.028590426,"top":0.28890663,"width":0.025265958,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sms_export.json","depth":27,"bounds":{"left":0.028590426,"top":0.3064645,"width":0.032912236,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.030917553,"top":0.30726257,"width":0.030917553,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.32402235,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"bounds":{"left":0.025930852,"top":0.32402235,"width":0.034574468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.32482043,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.031914894,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.0674867,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.18317819,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":".env.example, preview, Editor Group 1","depth":28,"bounds":{"left":0.22307181,"top":0.047885075,"width":0.05219415,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv, Editor Group 1","depth":28,"bounds":{"left":0.27526596,"top":0.047885075,"width":0.045877658,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv, Editor Group 1","depth":28,"bounds":{"left":0.32114363,"top":0.047885075,"width":0.04654255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json, Editor Group 1","depth":28,"bounds":{"left":0.36768618,"top":0.047885075,"width":0.053523935,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.14527926,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"# ── Database ───────────────────────────────────────────────────────────────────\nDB_PASSWORD=payments_secret\n\n# ── Notifier service ──────────────────────────────────────────────────────────\nNOTIFIER_URL=https://notifier.lakylak.xyz\nNOTIFIER_CHANNEL=viber\nNOTIFY_DEFAULT_PHONE=+359000000000\n\n# ── Timezone ─────────────────────────────────────────────────────────────────\nTZ=Europe/Sofia\n\n# ── API key auth — for MCP server, scripts, iOS shortcuts on protected endpoints ──\n# Generate with: openssl rand -hex 32\nAPI_KEY=94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c\n\n# ── Dev only — set false and configure NPM+Authentik for production ──────────\n# DEV_BYPASS_AUTH=true","depth":28,"bounds":{"left":0.13763298,"top":0.33758977,"width":0.2017952,"height":0.014365523},"on_screen":true,"value":"# ── Database ───────────────────────────────────────────────────────────────────\nDB_PASSWORD=payments_secret\n\n# ── Notifier service ──────────────────────────────────────────────────────────\nNOTIFIER_URL=https://notifier.lakylak.xyz\nNOTIFIER_CHANNEL=viber\nNOTIFY_DEFAULT_PHONE=+359000000000\n\n# ── Timezone ─────────────────────────────────────────────────────────────────\nTZ=Europe/Sofia\n\n# ── API key auth — for MCP server, scripts, iOS shortcuts on protected endpoints ──\n# Generate with: openssl rand -hex 32\nAPI_KEY=94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c\n\n# ── Dev only — set false and configure NPM+Authentik for production ──────────\n# DEV_BYPASS_AUTH=true","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"# ── Database ───────────────────────────────────────────────────────────────────\nDB_PASSWORD=payments_secret\n\n# ── Notifier service ──────────────────────────────────────────────────────────\nNOTIFIER_URL=https://notifier.lakylak.xyz\nNOTIFIER_CHANNEL=viber\nNOTIFY_DEFAULT_PHONE=+359000000000\n\n# ── Timezone ─────────────────────────────────────────────────────────────────\nTZ=Europe/Sofia\n\n# ── API key auth — for MCP server, scripts, iOS shortcuts on protected endpoints ──\n# Generate with: openssl rand -hex 32\nAPI_KEY=94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c\n\n# ── Dev only — set false and configure NPM+Authentik for production ──────────\n# DEV_BYPASS_AUTH=true","depth":29,"bounds":{"left":0.13763298,"top":0.09497207,"width":0.2017952,"height":0.24102154},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Design new payment-logge…, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.07912234,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Implement Authentik inte…, Editor Group 2","depth":28,"bounds":{"left":0.63663566,"top":0.047885075,"width":0.07446808,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"finance-hub (Git) - main*, Checkout Branch/Tag...","depth":16,"bounds":{"left":0.030917553,"top":0.98244214,"width":0.019281914,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"main*","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.011968086,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"finance-hub (Git) - Synchronize Changes","depth":16,"bounds":{"left":0.050199468,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.06017287,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.061835106,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.06715426,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07180851,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07712766,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.08444149,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.08610372,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.09142287,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement Authentik integration with security review","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.099734046,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"README.md","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"README.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets work on authentication. I want to be able to connect using authentik. REveiw copy of the project in auth folder. Lets test it and establish security. There should be simple way to reauthorize automatically for api and also there should be claude chat compatible mcp with autorization that si stable. Think about it test it and then provide suggestions","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the project structure first, particularly the auth folder.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List finance directory structure","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/finance -type f | head -80 && echo \"---\" && ls /volume2/docker/finance/","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/finance/payments-logger/.env\n/volume2/docker/finance/payments-logger/.env.example\n/volume2/docker/finance/payments-logger/.gitignore\n/volume2/docker/finance/payments-logger/API.md\n/volume2/docker/finance/payments-logger/README.md\n/volume2/docker/finance/payments-logger/docker-compose.yml\n/volume2/docker/finance/auth/.env\n/volume2/docker/finance/auth/.env.example\n/volume2/docker/finance/auth/README.md\n/volume2/docker/finance/auth/docker-compose.yml\n/volume2/docker/finance/dsk-uploader/.gitignore\n/volume2/docker/finance/dsk-uploader/README.md\n/volume2/docker/finance/dsk-uploader/USAGE.md\n/volume2/docker/finance/dsk-uploader/app.py\n/volume2/docker/finance/dsk-uploader/app_flask.py\n/volume2/docker/finance/dsk-uploader/dskuploader.py\n/volume2/docker/finance/dsk-uploader/requirements.txt\n/volume2/docker/finance/dsk-uploader/.env\n/volume2/docker/finance/dsk-uploader/.env.example\n/volume2/docker/finance/dsk-uploader/Dockerfile\n/volume2/docker/finance/dsk-uploader/docker-compose.yml\n/volume2/docker/finance/dsk-uploader/.dockerignore\n/volume2/docker/finance/finance-hub/.env.example\n/volume2/docker/finance/finance-hub/.gitignore\n/volume2/docker/finance/finance-hub/.env\n/volume2/docker/finance/finance-hub/docker-compose.yml\n/volume2/docker/finance/finance-hub/sms_export.json\n/volume2/docker/finance/finance-hub/README.md\n/volume2/docker/finance/payments-logger/.claude/settings.local.json\n/volume2/docker/finance/payments-logger/backend/.dockerignore\n/volume2/docker/finance/payments-logger/backend/Dockerfile\n/volume2/docker/finance/payments-logger/backend/package.json\n/volume2/docker/finance/finance-hub/backend/package.json\n/volume2/docker/finance/finance-hub/backend/Dockerfile\n/volume2/docker/finance/finance-hub/frontend/package.json\n/volume2/docker/finance/finance-hub/frontend/Dockerfile\n/volume2/docker/finance/finance-hub/frontend/vite.config.js\n/volume2/docker/finance/finance-hub/frontend/tailwind.config.js\n/volume2/docker/finance/finance-hub/frontend/postcss.config.js\n/volume2/docker/finance/finance-hub/frontend/index.html\n/volume2/docker/finance/finance-hub/scripts/reimport_sms.sh\n/volume2/docker/finance/finance-hub/.git/description\n/volume2/docker/finance/finance-hub/.git/HEAD\n/volume2/docker/finance/finance-hub/.git/COMMIT_EDITMSG\n/volume2/docker/finance/finance-hub/.git/index\n/volume2/docker/finance/finance-hub/.git/hooks/post-update.sample\n/volume2/docker/finance/finance-hub/.git/hooks/pre-applypatch.sample\n/volume2/docker/finance/finance-hub/.git/hooks/pre-commit.sample\n/volume2/docker/finance/finance-hub/.git/hooks/applypatch-msg.sample\n/volume2/docker/finance/finance-hub/.git/hooks/pre-rebase.sample\n/volume2/docker/finance/finance-hub/.git/hooks/pre-merge-commit.sample\n/volume2/docker/finance/finance-hub/.git/hooks/update.sample\n/volume2/docker/finance/finance-hub/.git/hooks/pre-push.sample\n/volume2/docker/finance/finance-hub/.git/hooks/push-to-checkout.sample\n/volume2/docker/finance/finance-hub/.git/hooks/prepare-commit-msg.sample\n/volume2/docker/finance/finance-hub/.git/hooks/commit-msg.sample\n/volume2/docker/finance/finance-hub/.git/hooks/pre-receive.sample\n/volume2/docker/finance/finance-hub/.git/hooks/fsmonitor-watchman.sample\n/volume2/docker/finance/finance-hub/.git/logs/HEAD\n/volume2/docker/finance/payments-logger/frontend/.dockerignore\n/volume2/docker/finance/payments-logger/frontend/Dockerfile\n/volume2/docker/finance/payments-logger/frontend/index.html\n/volume2/docker/finance/payments-logger/frontend/package.json\n/volume2/docker/finance/payments-logger/frontend/postcss.config.js\n/volume2/docker/finance/payments-logger/frontend/tailwind.config.js\n/volume2/docker/finance/payments-logger/frontend/vite.config.js\n/volume2/docker/finance/finance-hub/.git/config\n/volume2/docker/finance/payments-logger/auth/.env\n/volume2/docker/finance/payments-logger/auth/.env.example\n/volume2/docker/finance/payments-logger/auth/README.md\n/volume2/docker/finance/auth/auth/.env\n/volume2/docker/finance/auth/auth/.env.example\n/volume2/docker/finance/auth/auth/docker-compose.yml\n/volume2/docker/finance/auth/auth/README.md\n/volume2/docker/finance/dsk-uploader/.git/description\n/volume2/docker/finance/dsk-uploader/.git/packed-refs\n/volume2/docker/finance/dsk-uploader/.git/HEAD\n/volume2/docker/finance/dsk-uploader/.git/FETCH_HEAD\n/volume2/docker/finance/dsk-uploader/.git/index\n/volume2/docker/finance/dsk-uploader/.git/COMMIT_EDITMSG\n---\nauth\ndsk-uploader\nfinance-hub\npayments-logger","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"README.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"README.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now let me dive into the auth folder and the existing backend auth setup.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"README.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"README.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read auth env examples and nested auth config","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume2/docker/finance/auth/.env.example && echo \"===\" && cat /volume2/docker/finance/auth/auth/.env.example 2>/dev/null && echo \"===\" && cat /volume2/docker/finance/auth/auth/docker-compose.yml 2>/dev/null","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Copy this file to .env and fill in all values before starting\n\n# ── Image versions ───────────────────────────────────────────────────────────\n# Pinned tag applied to server, worker, AND outpost — they must always match.\n# To upgrade: change this one value and run: docker compose pull && docker compose up -d\n# Check releases: https://github.com/goauthentik/authentik/releases\nAUTHENTIK_TAG=2026.2.1\n\n# ── Database ──────────────────────────────────────────────────────────────────\n# Strong password for the PostgreSQL authentik database\n# Used by the postgres container and all authentik services\nPG_PASS=\n\n# ── Authentik core ────────────────────────────────────────────────────────────\n# Cryptographic secret — NEVER share or commit this\n# Generate with: openssl rand -base64 36\nAUTHENTIK_SECRET_KEY=\n\n# Full public HTTPS URL where authentik is reachable\n# Must match the domain you configure in NPM\n# Used for OAuth redirects and by the outpost to contact the server\nAUTHENTIK_HOST=https://auth.lakylak.xyz\n\n# ── Bootstrap (first-start only) ─────────────────────────────────────────────\n# If set, authentik creates this admin account automatically on first boot.\n# You can leave these empty and use the /if/flow/initial-setup/ URL instead.\nAUTHENTIK_BOOTSTRAP_EMAIL=you@example.com\nAUTHENTIK_BOOTSTRAP_PASSWORD=\n\n# ── Outpost ───────────────────────────────────────────────────────────────────\n# Token for the proxy outpost container.\n# Leave as \"placeholder\" on first deploy — the outpost will fail to connect\n# until you create it in the UI and paste the real token here (see README step 6).\nAUTHENTIK_OUTPOST_TOKEN=placeholder\n===\n# Copy this file to .env and fill in all values before starting\n\n# ── Image versions ───────────────────────────────────────────────────────────\n# Pinned tag applied to server, worker, AND outpost — they must always match.\n# To upgrade: change this one value and run: docker compose pull && docker compose up -d\n# Check releases: https://github.com/goauthentik/authentik/releases\nAUTHENTIK_TAG=2026.2.1\n\n# ── Database ──────────────────────────────────────────────────────────────────\n# Strong password for the PostgreSQL authentik database\n# Used by the postgres container and all authentik services\nPG_PASS=\n\n# ── Authentik core ────────────────────────────────────────────────────────────\n# Cryptographic secret — NEVER share or commit this\n# Generate with: openssl rand -base64 36\nAUTHENTIK_SECRET_KEY=\n\n# Full public HTTPS URL where authentik is reachable\n# Must match the domain you configure in NPM\n# Used for OAuth redirects and by the outpost to contact the server\nAUTHENTIK_HOST=https://auth.lakylak.xyz\n\n# ── Bootstrap (first-start only) ─────────────────────────────────────────────\n# If set, authentik creates this admin account automatically on first boot.\n# You can leave these empty and use the /if/flow/initial-setup/ URL instead.\nAUTHENTIK_BOOTSTRAP_EMAIL=you@example.com\nAUTHENTIK_BOOTSTRAP_PASSWORD=\n\n# ── Outpost ───────────────────────────────────────────────────────────────────\n# Token for the proxy outpost container.\n# Leave as \"placeholder\" on first deploy — the outpost will fail to connect\n# until you create it in the UI and paste the real token here (see README step 6).\nAUTHENTIK_OUTPOST_TOKEN=placeholder\n===\nservices:\n\n postgresql:\n image: docker.io/library/postgres:16-alpine\n container_name: Authentik-DB\n hostname: authentik-db\n restart: unless-stopped\n security_opt:\n - no-new-privileges:true\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -d ${POSTGRES_DB:-authentik} -U ${POSTGRES_USER:-authentik}\"]\n interval: 5s\n timeout: 5s\n retries: 5\n environment:\n POSTGRES_PASSWORD: ${PG_PASS}\n POSTGRES_USER: authentik\n POSTGRES_DB: authentik\n volumes:\n - /volume2/docker/auth/db:/var/lib/postgresql/data\n networks:\n - authentik_internal\n\n redis:\n image: docker.io/library/redis:alpine\n container_name: Authentik-REDIS\n hostname: authentik-redis\n restart: unless-stopped\n security_opt:\n - no-new-privileges:true\n healthcheck:\n test: [\"CMD-SHELL\", \"redis-cli ping | grep PONG\"]\n interval: 5s\n timeout: 3s\n retries: 5\n networks:\n - authentik_internal\n\n server:\n image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG}\n container_name: Authentik-Server\n hostname: authentik-server\n restart: unless-stopped\n command: server\n environment:\n AUTHENTIK_REDIS__HOST: authentik-redis\n AUTHENTIK_POSTGRESQL__HOST: authentik-db\n AUTHENTIK_POSTGRESQL__USER: authentik\n AUTHENTIK_POSTGRESQL__NAME: authentik\n AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}\n AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}\n AUTHENTIK_ERROR_REPORTING__ENABLED: \"false\"\n AUTHENTIK_HOST: ${AUTHENTIK_HOST}\n AUTHENTIK_BOOTSTRAP_EMAIL: ${AUTHENTIK_BOOTSTRAP_EMAIL}\n AUTHENTIK_BOOTSTRAP_PASSWORD: ${AUTHENTIK_BOOTSTRAP_PASSWORD}\n ports:\n - \"9100:9000\"\n volumes:\n - /volume2/docker/auth/media:/media\n - /volume2/docker/auth/templates:/templates\n depends_on:\n postgresql:\n condition: service_healthy\n redis:\n condition: service_healthy\n networks:\n - authentik_internal\n - proxy\n\n worker:\n image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG}\n container_name: Authentik-Worker\n hostname: authentik-worker\n restart: unless-stopped\n command: worker\n user: root\n environment:\n AUTHENTIK_REDIS__HOST: authentik-redis\n AUTHENTIK_POSTGRESQL__HOST: authentik-db\n AUTHENTIK_POSTGRESQL__USER: authentik\n AUTHENTIK_POSTGRESQL__NAME: authentik\n AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}\n AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /volume2/docker/auth/media:/media\n - /volume2/docker/auth/certs:/certs\n - /volume2/docker/auth/templates:/templates\n depends_on:\n postgresql:\n condition: service_healthy\n redis:\n condition: service_healthy\n networks:\n - authentik_internal\n\n outpost:\n image: ghcr.io/goauthentik/proxy:${AUTHENTIK_TAG}\n container_name: Authentik-Outpost\n hostname: authentik-outpost\n restart: unless-stopped\n environment:\n AUTHENTIK_HOST: ${AUTHENTIK_HOST}\n AUTHENTIK_INSECURE: \"false\"\n AUTHENTIK_TOKEN: ${AUTHENTIK_OUTPOST_TOKEN}\n ports:\n - \"9101:9000\"\n depends_on:\n - server\n networks:\n - authentik_internal\n - proxy\n\nnetworks:\n authentik_internal:\n internal: true\n proxy:\n external: true","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now let me look at the backend auth code and the current services.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List backend and frontend source files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/finance/finance-hub/backend -type f | sort && echo \"===\" && find /volume2/docker/finance/finance-hub/frontend/src -type f | sort 2>/dev/null || find /volume2/docker/finance/finance-hub/frontend -type f | sort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/finance/finance-hub/backend/Dockerfile\n/volume2/docker/finance/finance-hub/backend/package.json\n/volume2/docker/finance/finance-hub/backend/prisma/migrations/20260508_init/migration.sql\n/volume2/docker/finance/finance-hub/backend/prisma/migrations/20260509_refactor/migration.sql\n/volume2/docker/finance/finance-hub/backend/prisma/migrations/migration_lock.toml\n/volume2/docker/finance/finance-hub/backend/prisma/schema.prisma\n/volume2/docker/finance/finance-hub/backend/src/auth.js\n/volume2/docker/finance/finance-hub/backend/src/csvParser.js\n/volume2/docker/finance/finance-hub/backend/src/index.js\n/volume2/docker/finance/finance-hub/backend/src/parser.js\n/volume2/docker/finance/finance-hub/backend/src/routes/payments.js\n/volume2/docker/finance/finance-hub/backend/src/routes/upload.js\n/volume2/docker/finance/finance-hub/backend/src/utils/linkTransaction.js\n/volume2/docker/finance/finance-hub/backend/src/utils/recipientTags.js\n===\n/volume2/docker/finance/finance-hub/frontend/src/App.jsx\n/volume2/docker/finance/finance-hub/frontend/src/components/FilterBar.jsx\n/volume2/docker/finance/finance-hub/frontend/src/components/PaymentCard.jsx\n/volume2/docker/finance/finance-hub/frontend/src/components/PaymentList.jsx\n/volume2/docker/finance/finance-hub/frontend/src/components/PaymentTable.jsx\n/volume2/docker/finance/finance-hub/frontend/src/components/SettingsPanel.jsx\n/volume2/docker/finance/finance-hub/frontend/src/components/UploadPanel.jsx\n/volume2/docker/finance/finance-hub/frontend/src/hooks/useSettings.js\n/volume2/docker/finance/finance-hub/frontend/src/index.css\n/volume2/docker/finance/finance-hub/frontend/src/main.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check running Docker containers","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps --format \"table {{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null | head -30","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"auth.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"auth.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check all Docker containers","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"docker ps -a --format \"table {{.Names}}\\t{{.Status}}\\t{{.Ports}}\" 2>/dev/null","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"App.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"App.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check status of auth and finance-hub Docker services","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cd /volume2/docker/finance/auth && docker compose ps 2>/dev/null || echo \"NOT RUNNING\"\necho \"===\"\ncd /volume2/docker/finance/finance-hub && docker compose ps 2>/dev/null || echo \"NOT RUNNING\"","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"NOT RUNNING\n===\nNOT RUNNING","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me check a few more details before forming recommendations.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"README.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"README.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check payments-logger auth config","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume2/docker/finance/payments-logger/auth/.env.example 2>/dev/null && echo \"===\" && cat /volume2/docker/finance/payments-logger/auth/.env 2>/dev/null","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Copy this file to .env and fill in all values before starting\n\n# ── Image versions ───────────────────────────────────────────────────────────\n# Pinned tag applied to server, worker, AND outpost — they must always match.\n# To upgrade: change this one value and run: docker compose pull && docker compose up -d\n# Check releases: https://github.com/goauthentik/authentik/releases\nAUTHENTIK_TAG=2026.2.1\n\n# ── Database ──────────────────────────────────────────────────────────────────\n# Strong password for the PostgreSQL authentik database\n# Used by the postgres container and all authentik services\nPG_PASS=\n\n# ── Authentik core ────────────────────────────────────────────────────────────\n# Cryptographic secret — NEVER share or commit this\n# Generate with: openssl rand -base64 36\nAUTHENTIK_SECRET_KEY=\n\n# Full public HTTPS URL where authentik is reachable\n# Must match the domain you configure in NPM\n# Used for OAuth redirects and by the outpost to contact the server\nAUTHENTIK_HOST=https://auth.lakylak.xyz\n\n# ── Bootstrap (first-start only) ─────────────────────────────────────────────\n# If set, authentik creates this admin account automatically on first boot.\n# You can leave these empty and use the /if/flow/initial-setup/ URL instead.\nAUTHENTIK_BOOTSTRAP_EMAIL=you@example.com\nAUTHENTIK_BOOTSTRAP_PASSWORD=\n\n# ── Outpost ───────────────────────────────────────────────────────────────────\n# Token for the proxy outpost container.\n# Leave as \"placeholder\" on first deploy — the outpost will fail to connect\n# until you create it in the UI and paste the real token here (see README step 6).\nAUTHENTIK_OUTPOST_TOKEN=placeholder\n===\n# Authentik image tag — applies to server, worker, AND outpost (must all match)\n# Check latest: https://github.com/goauthentik/authentik/releases\n# Example: 2024.12.3\nAUTHENTIK_TAG=2026.2.1\n\n# PostgreSQL password — used by both postgres and authentik server/worker\nPG_PASS=Og8L5@a1QA6u\n\n# Secret key — generate with: openssl rand -base64 36\nAUTHENTIK_SECRET_KEY=Uq6Mc2oI6zeWtoZcCy+Dw+IdNJ80yIMZk5ZgsP/tYmopFmhB/RHxbN7TNFZDNR1wrao=\n\n# Public URL authentik is reachable at (used for redirects and the outpost)\nAUTHENTIK_HOST=https://auth.lakylak.xyz\n\n# Bootstrap admin account created on first start (can be left empty to set via UI)\nAUTHENTIK_BOOTSTRAP_EMAIL=kovaliklukas@proton.me\nAUTHENTIK_BOOTSTRAP_PASSWORD=3bAc4Jcs\n\n# Outpost token — leave as placeholder until you create the outpost in the Authentik UI\n# See README.md step 6 for how to get this value\nAUTHENTIK_OUTPOST_TOKEN=H7Ppl2ps6h6e1mJ0CwXXoklQScbFJ1gT5WYXErtaRRQz5ukWfES78OXLVz6S","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Test if Authentik and finance backend are reachable","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"curl -s --max-time 3 http://localhost:9100/api/v3/core/applications/ 2>/dev/null | head -20 || echo \"Authentik not reachable on 9100\"\ncurl -s --max-time 3 http://localhost:3001/api/health 2>/dev/null | head -5 || echo \"Finance backend not reachable on 3001\"","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"{\"detail\":\"Authentication credentials were not provided.\"}{\"status\":\"ok\",\"timestamp\":\"2026-05-09T16:02:54.094Z\",\"storage\":{\"type\":\"PostgreSQL\",\"host\":\"db\",\"database\":\"finance_hub\"}}","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Both Authentik (port 9100) and finance backend (port 3001) are running. Let me test the actual auth state and check CORS config.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Test backend auth bypass and Authentik health","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Test that backend accepts requests without auth (DEV_BYPASS_AUTH=true)\ncurl -s http://localhost:3001/api/payments?limit=1 | python3 -c \"import sys,json; d=json.load(sys.stdin); print('AUTH BYPASS ACTIVE - got', d.get('total','?'), 'records')\" 2>/dev/null || echo \"Error parsing\"\n\n# Test Authentik health\ncurl -s --max-time 3 http://localhost:9100/-/health/ready/ && echo \"Authentik ready\"","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AUTH BYPASS ACTIVE - got 235 records\nAuthentik ready","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"payments.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good picture. Let me now check the latest MCP SDK version before building.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check MCP SDK latest version and node version","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"npm view @modelcontextprotocol/sdk version 2>/dev/null && node --version","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 127","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verify public path configuration","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Check if the upload endpoints are really public\ngrep -n 'PUBLIC_PATHS\\|upload\\|ingest' /volume2/docker/finance/finance-hub/backend/src/auth.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"<tool_use_error>Cancelled: parallel tool call Bash(npm view @modelcontextprotocol/sdk versi…) errored</tool_use_error>","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check node version and MCP SDK latest","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"node --version 2>/dev/null && python3 -c \"import urllib.request; import json; d=json.loads(urllib.request.urlopen('https://registry.npmjs.org/@modelcontextprotocol/sdk/latest').read()); print(d['version'])\" 2>/dev/null || echo \"no npm/network\"","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"v18.20.4\n1.29.0","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fix auth.js: add API key support + remove upload endpoints from PUBLIC_PATHS","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update index.js: add CORS origin restriction via env var","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update .env and .env.example with API_KEY variable","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build MCP server (stdio, Claude desktop compatible)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Test: restart backend, verify API key auth and MCP connection","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"auth.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"auth.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 18 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fix auth.js: add API key support + remove upload endpoints from PUBLIC_PATHS","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update index.js: add CORS origin restriction via env var","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update .env and .env.example with API_KEY variable","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build MCP server (stdio, Claude desktop compatible)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Test: restart backend, verify API key auth and MCP connection","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 3 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fix auth.js: add API key support + remove upload endpoints from PUBLIC_PATHS","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update index.js: add CORS origin restriction via env var","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update .env and .env.example with API_KEY variable","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build MCP server (stdio, Claude desktop compatible)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Test: restart backend, verify API key auth and MCP connection","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Generate a secure API key","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"openssl rand -hex 32","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 4 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env.example","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env.example","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env.example","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env.example","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 12 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Also need to pass","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"API_KEY","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"and","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CORS_ORIGIN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"through docker-compose:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 3 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fix auth.js: add API key support + remove upload endpoints from PUBLIC_PATHS","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update index.js: add CORS origin restriction via env var","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update .env and .env.example with API_KEY variable","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build MCP server (stdio, Claude desktop compatible)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Test: restart backend, verify API key auth and MCP connection","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now building the MCP server:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create MCP directory","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"mkdir -p /volume2/docker/finance/finance-hub/mcp && ls /volume2/docker/finance/finance-hub/mcp","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"17 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"{\n \"name\": \"finance-hub-mcp\",\n \"version\": \"1.0.0\",\n \"description\": \"MCP server for Finance Hub — exposes transaction tools to Claude\",\n \"main\": \"server.js\",\n \"type\": \"module\",\n \"scripts\": {\n \"start\": \"node server.js\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.29.0\"\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"server.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"server.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"236 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\n\nconst BASE_URL = (process.env.FINANCE_HUB_URL || 'http://localhost:3001').replace(/\\/$/, '');\nconst API_KEY = process.env.FINANCE_HUB_API_KEY;\n\nif (!API_KEY) {\n process.stderr.write('Warning: FINANCE_HUB_API_KEY not set — requests will fail if DEV_BYPASS_AUTH is off\\n');\n}\n\n// ── HTTP helper ───────────────────────────────────────────────────────────────\n\nasync function api(path, opts = {}) {\n const headers = { 'Content-Type': 'application/json' };\n if (API_KEY) headers['Authorization'] = `Bearer ${API_KEY}`;\n\n const res = await fetch(`${BASE_URL}${path}`, {\n ...opts,\n headers: { ...headers, ...(opts.headers || {}) },\n });\n\n if (res.status === 204) return null;\n const body = await res.text();\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${body}`);\n return body ? JSON.parse(body) : null;\n}\n\n// ── Tool definitions ──────────────────────────────────────────────────────────\n\nconst TOOLS = [\n {\n name: 'list_transactions',\n description:\n 'List finance transactions with optional filters. Returns paginated results including total amount for the filtered set.',\n inputSchema: {\n type: 'object',\n properties: {\n page: { type: 'number', description: 'Page number (default 1)' },\n limit: { type: 'number', description: 'Results per page, max 200 (default 50)' },\n dateFrom: { type: 'string', description: 'Start date YYYY-MM-DD (inclusive)' },\n dateTo: { type: 'string', description: 'End date YYYY-MM-DD (inclusive)' },\n tag: { type: 'string', description: 'Filter by tag name' },\n recipient: { type: 'string', description: 'Substring match on payee name' },\n type: { type: 'string', description: 'Transaction type: POS | ATM | WALLET' },\n source: { type: 'string', description: 'Import source: INGEST | UPLOAD' },\n search: { type: 'string', description: 'Full-text search across rawMessage and recipient' },\n hideBalanceAlerts: { type: 'boolean', description: 'Exclude balance-notification SMS (default false)' },\n sortBy: { type: 'string', description: 'Sort field: date | amount | recipient | createdAt' },\n sortDir: { type: 'string', description: 'asc or desc (default desc)' },\n },\n },\n },\n {\n name: 'spending_by_tag',\n description:\n 'Aggregate spending totals by tag for a date range. Fetches up to 200 transactions and groups them. Good for monthly summaries.',\n inputSchema: {\n type: 'object',\n properties: {\n dateFrom: { type: 'string', description: 'Start date YYYY-MM-DD' },\n dateTo: { type: 'string', description: 'End date YYYY-MM-DD' },\n },\n },\n },\n {\n name: 'get_transaction',\n description: 'Get a single transaction by its numeric ID.',\n inputSchema: {\n type: 'object',\n required: ['id'],\n properties: {\n id: { type: 'number', description: 'Transaction import ID' },\n },\n },\n },\n {\n name: 'list_tags',\n description: 'List all available tags with their colors.',\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'add_tag',\n description: 'Add a tag to a transaction. Creates the tag globally if it does not exist.',\n inputSchema: {\n type: 'object',\n required: ['id', 'name'],\n properties: {\n id: { type: 'number', description: 'Transaction ID' },\n name: { type: 'string', description: 'Tag name (e.g. \"Groceries\")' },\n color: { type: 'string', description: 'Hex color (e.g. \"#22c55e\"). Optional — auto-assigned if omitted.' },\n },\n },\n },\n {\n name: 'remove_tag',\n description: 'Remove a tag from a transaction.',\n inputSchema: {\n type: 'object',\n required: ['id', 'tagId'],\n properties: {\n id: { type: 'number', description: 'Transaction ID' },\n tagId: { type: 'number', description: 'Tag ID (from list_tags or the transaction object)' },\n },\n },\n },\n {\n name: 'health_check',\n description: 'Check Finance Hub backend connectivity and database status.',\n inputSchema: { type: 'object', properties: {} },\n },\n];\n\n// ── Server setup ──────────────────────────────────────────────────────────────\n\nconst server = new Server(\n { name: 'finance-hub', version: '1.0.0' },\n { capabilities: { tools: {} } },\n);\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args = {} } = request.params;\n\n try {\n switch (name) {\n\n case 'list_transactions': {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(args)) {\n if (v !== undefined && v !== null && v !== '') params.set(k, String(v));\n }\n const data = await api(`/api/payments?${params}`);\n return text(JSON.stringify({\n total: data.total,\n page: data.page,\n limit: data.limit,\n totalAmount: data.totalAmount,\n transactions: data.payments,\n }, null, 2));\n }\n\n case 'spending_by_tag': {\n const params = new URLSearchParams({ limit: '200', hideBalanceAlerts: 'true' });\n if (args.dateFrom) params.set('dateFrom', args.dateFrom);\n if (args.dateTo) params.set('dateTo', args.dateTo);\n\n const data = await api(`/api/payments?${params}`);\n\n const byTag = {};\n let untaggedTotal = 0, untaggedCount = 0;\n\n for (const tx of data.payments) {\n const amount = tx.amount ?? 0;\n if (!tx.tags?.length) {\n untaggedTotal += amount;\n untaggedCount++;\n } else {\n for (const tag of tx.tags) {\n if (!byTag[tag.name]) byTag[tag.name] = { total: 0, count: 0 };\n byTag[tag.name].total += amount;\n byTag[tag.name].count++;\n }\n }\n }\n\n const breakdown = Object.entries(byTag)\n .map(([tag, s]) => ({ tag, total: round2(s.total), count: s.count }))\n .sort((a, b) => b.total - a.total);\n\n if (untaggedCount) breakdown.push({ tag: '(untagged)', total: round2(untaggedTotal), count: untaggedCount });\n\n return text(JSON.stringify({\n period: { from: args.dateFrom ?? null, to: args.dateTo ?? null },\n totalTransactions: data.total,\n note: data.total > 200 ? `Only first 200 of ${data.total} transactions included — refine the date range for full accuracy` : undefined,\n breakdown,\n }, null, 2));\n }\n\n case 'get_transaction': {\n const data = await api(`/api/payments/${args.id}`);\n return text(JSON.stringify(data, null, 2));\n }\n\n case 'list_tags': {\n const data = await api('/api/payments/meta/tags');\n return text(JSON.stringify(data, null, 2));\n }\n\n case 'add_tag': {\n const data = await api(`/api/payments/${args.id}/tags`, {\n method: 'POST',\n body: JSON.stringify({ name: args.name, color: args.color }),\n });\n return text(JSON.stringify(data, null, 2));\n }\n\n case 'remove_tag': {\n await api(`/api/payments/${args.id}/tags/${args.tagId}`, { method: 'DELETE' });\n return text('Tag removed successfully');\n }\n\n case 'health_check': {\n const data = await api('/api/health');\n return text(JSON.stringify(data, null, 2));\n }\n\n default:\n throw new Error(`Unknown tool: ${name}`);\n }\n } catch (err) {\n return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };\n }\n});\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction text(str) {\n return { content: [{ type: 'text', text: str }] };\n}\n\nfunction round2(n) {\n return Math.round(n * 100) / 100;\n}\n\n// ── Entry point ───────────────────────────────────────────────────────────────\n\nconst transport = new StdioServerTransport();\nawait server.connect(transport);\nprocess.stderr.write(`Finance Hub MCP server connected to ${BASE_URL}\\n`);","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now install the MCP SDK and test it:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Install MCP SDK dependencies","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cd /volume2/docker/finance/finance-hub/mcp && node --version && npm install --save-exact 2>&1 | tail -5","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"v18.20.4\n/bin/bash: line 1: npm: command not found","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Locate npm","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"which npm || find /usr -name npm 2>/dev/null | head -5 || find /usr/local -name npm 2>/dev/null | head -5 || ls /root/.nvm/versions/node/ 2>/dev/null","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check system info","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /proc/1/exe 2>/dev/null && cat /proc/version && uname -a","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 2","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Find npm via Docker","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2 /opt /home -name npm -type f 2>/dev/null | head -5\ndocker run --rm node:18-alpine node --version 2>/dev/null | head -1","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/home/Adm1n/.nvm/versions/node/v24.14.1/lib/node_modules/corepack/shims/npm\n/home/Adm1n/.nvm/versions/node/v24.14.1/lib/node_modules/npm/bin/npm\n/home/Adm1n/.nvm/versions/node/v24.14.1/lib/node_modules/corepack/shims/nodewin/npm","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Install MCP SDK via located npm","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/home/Adm1n/.nvm/versions/node/v24.14.1/lib/node_modules/npm/bin/npm-cli.js install --save-exact 2>&1 | tail -5","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"28 packages are looking for funding\n run `npm fund` for details\n\nfound 0 vulnerabilities","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verify MCP package installed","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls && cat package.json | python3 -c \"import json,sys; d=json.load(sys.stdin); print(d['dependencies'])\"","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"node_modules\npackage.json\npackage-lock.json\nserver.js\n{'@modelcontextprotocol/sdk': '^1.29.0'}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good. Now let me test the MCP server can at least start and call the health check:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Smoke test MCP server startup","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FINANCE_HUB_URL=http://localhost:3001 FINANCE_HUB_API_KEY=94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c \\\n echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}' | timeout 5 node server.js 2>/dev/null | head -3 || echo \"NODE test (expected timeout on stdin wait)\"","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"{\"result\":{\"tools\":[{\"name\":\"list_transactions\",\"description\":\"List finance transactions with optional filters. Returns paginated results including total amount for the filtered set.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"page\":{\"type\":\"number\",\"description\":\"Page number (default 1)\"},\"limit\":{\"type\":\"number\",\"description\":\"Results per page, max 200 (default 50)\"},\"dateFrom\":{\"type\":\"string\",\"description\":\"Start date YYYY-MM-DD (inclusive)\"},\"dateTo\":{\"type\":\"string\",\"description\":\"End date YYYY-MM-DD (inclusive)\"},\"tag\":{\"type\":\"string\",\"description\":\"Filter by tag name\"},\"recipient\":{\"type\":\"string\",\"description\":\"Substring match on payee name\"},\"type\":{\"type\":\"string\",\"description\":\"Transaction type: POS | ATM | WALLET\"},\"source\":{\"type\":\"string\",\"description\":\"Import source: INGEST | UPLOAD\"},\"search\":{\"type\":\"string\",\"description\":\"Full-text search across rawMessage and recipient\"},\"hideBalanceAlerts\":{\"type\":\"boolean\",\"description\":\"Exclude balance-notification SMS (default false)\"},\"sortBy\":{\"type\":\"string\",\"description\":\"Sort field: date | amount | recipient | createdAt\"},\"sortDir\":{\"type\":\"string\",\"description\":\"asc or desc (default desc)\"}}}},{\"name\":\"spending_by_tag\",\"description\":\"Aggregate spending totals by tag for a date range. Fetches up to 200 transactions and groups them. Good for monthly summaries.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"dateFrom\":{\"type\":\"string\",\"description\":\"Start date YYYY-MM-DD\"},\"dateTo\":{\"type\":\"string\",\"description\":\"End date YYYY-MM-DD\"}}}},{\"name\":\"get_transaction\",\"description\":\"Get a single transaction by its numeric ID.\",\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"number\",\"description\":\"Transaction import ID\"}}}},{\"name\":\"list_tags\",\"description\":\"List all available tags with their colors.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{}}},{\"name\":\"add_tag\",\"description\":\"Add a tag to a transaction. Creates the tag globally if it does not exist.\",\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"type\":\"number\",\"description\":\"Transaction ID\"},\"name\":{\"type\":\"string\",\"description\":\"Tag name (e.g. \\\"Groceries\\\")\"},\"color\":{\"type\":\"string\",\"description\":\"Hex color (e.g. \\\"#22c55e\\\"). Optional — auto-assigned if omitted.\"}}}},{\"name\":\"remove_tag\",\"description\":\"Remove a tag from a transaction.\",\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"tagId\"],\"properties\":{\"id\":{\"type\":\"number\",\"description\":\"Transaction ID\"},\"tagId\":{\"type\":\"number\",\"description\":\"Tag ID (from list_tags or the transaction object)\"}}}},{\"name\":\"health_check\",\"description\":\"Check Finance Hub backend connectivity and database status.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{}}}]},\"jsonrpc\":\"2.0\",\"id\":1}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MCP server responds correctly. Now test an actual tool call:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Test MCP health_check tool against live backend","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"\\\n printf '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}\\n{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{\"name\":\"health_check\",\"arguments\":{}}}\\n' | \\\n FINANCE_HUB_URL=http://localhost:3001 FINANCE_HUB_API_KEY=94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c \\\n timeout 5 node server.js 2>/dev/null | tail -1 | python3 -c \"import sys,json; d=json.load(sys.stdin); print(d['result']['content'][0]['text'])\"","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"{\n \"status\": \"ok\",\n \"timestamp\": \"2026-05-09T16:19:09.977Z\",\n \"storage\": {\n \"type\": \"PostgreSQL\",\n \"host\": \"db\",\n \"database\": \"finance_hub\"\n }\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rebuild backend with API key auth changes","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Test the API key auth directly against the backend (backend still has DEV_BYPASS_AUTH=true, need to restart first)\n# First rebuild with the new code\ncd /volume2/docker/finance/finance-hub && docker compose up -d --build backend 2>&1 | tail -8","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"time=\"2026-05-09T19:19:13+03:00\" level=warning msg=\"/volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete\"\npermission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get \"http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dfinance-hub%22%3Atrue%7D%7D\": dial unix /var/run/docker.sock: connect: permission denied","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rebuild backend with sudo","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sudo docker compose -f /volume2/docker/finance/finance-hub/docker-compose.yml up -d --build backend 2>&1 | tail -10","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper\nsudo: a password is required","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Docker needs sudo+password. Let me verify the auth changes are correct by testing the logic directly:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Unit test the auth middleware logic","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"node - << 'EOF'\n// Simulate the auth middleware logic\nconst API_KEY = '94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c';\nprocess.env.API_KEY = API_KEY;\n\nconst { authentikMiddleware } = require('/volume2/docker/finance/finance-hub/backend/src/auth.js');\n\nfunction testReq(path, headers = {}) {\n const res = { status(code) { this.code = code; return this; }, json(body) { return body; } };\n const req = { path, headers };\n let passed = false;\n authentikMiddleware(req, res, () => { passed = true; });\n return { passed, code: res.code, user: req.user };\n}\n\n// Public path — no auth needed\nlet r = testReq('/api/health', {});\nconsole.assert(r.passed, 'health should be public');\nconsole.log('✓ /api/health is public');\n\n// Valid API key\nr = testReq('/api/payments', { authorization: `Bearer ${API_KEY}` });\nconsole.assert(r.passed, 'valid key should pass');\nconsole.assert(r.user.username === 'api-key', 'api user');\nconsole.log('✓ valid API key passes');\n\n// Wrong API key\nr = testReq('/api/payments', { authorization: 'Bearer wrongkey' });\nconsole.assert(!r.passed, 'wrong key should fail');\nconsole.assert(r.code === 401, '401 on bad key');\nconsole.log('✓ wrong API key returns 401');\n\n// No auth + no bypass + no authentik header\nprocess.env.DEV_BYPASS_AUTH = 'false';\nr = testReq('/api/payments', {});\nconsole.assert(!r.passed && r.code === 401, 'no creds → 401');\nconsole.log('✓ no credentials returns 401');\n\n// Upload endpoints no longer public\nr = testReq('/api/upload/csv', {});\nconsole.assert(!r.passed && r.code === 401, 'upload/csv requires auth');\nconsole.log('✓ /api/upload/csv now requires auth (was public, now fixed)');\n\n// Authentik header pass-through\nr = testReq('/api/payments', { 'x-authentik-username': 'lukastest', 'x-authentik-email': 'test@test.com' });\nconsole.assert(r.passed && r.user.username === 'lukastest', 'authentik header works');\nconsole.log('✓ Authentik X-authentik-username header works');\n\nconsole.log('\\nAll auth tests passed.');\nEOF","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"✓ /api/health is public\n✓ valid API key passes\n✓ wrong API key returns 401\n✓ no credentials returns 401\n✓ /api/upload/csv now requires auth (was public, now fixed)\n✓ Authentik X-authentik-username header works\n\nAll auth tests passed.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"All auth cases pass. Now test the MCP spending_by_tag tool against the live backend (with DEV_BYPASS_AUTH still on):","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Test spending_by_tag MCP tool against live backend","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cd /volume2/docker/finance/finance-hub/mcp && \\\n printf '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}\\n{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{\"name\":\"spending_by_tag\",\"arguments\":{\"dateFrom\":\"2026-05-01\",\"dateTo\":\"2026-05-09\"}}}\\n' | \\\n FINANCE_HUB_URL=http://localhost:3001 FINANCE_HUB_API_KEY=94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c \\\n timeout 8 node server.js 2>/dev/null | grep '\"id\":2' | python3 -c \"import sys,json; d=json.load(sys.stdin); print(d['result']['content'][0]['text'][:500])\"","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"{\n \"period\": {\n \"from\": \"2026-05-01\",\n \"to\": \"2026-05-09\"\n },\n \"totalTransactions\": 36,\n \"breakdown\": [\n {\n \"tag\": \"Bills\",\n \"total\": 117.9,\n \"count\": 6\n },\n {\n \"tag\": \"(untagged)\",\n \"total\": 1153.87,\n \"count\": 22\n }\n ]\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MCP tools work correctly against real data. Let me write the Claude desktop config example and the","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"for the mcp dir:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"claude_desktop_config.example.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"claude_desktop_config.example.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"14 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"{\n \"_comment\": \"Add this block to ~/.config/claude/claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json)\",\n \"mcpServers\": {\n \"finance-hub\": {\n \"command\": \"node\",\n \"args\": [\"/volume2/docker/finance/finance-hub/mcp/server.js\"],\n \"env\": {\n \"FINANCE_HUB_URL\": \"http://localhost:3001\",\n \"FINANCE_HUB_API_KEY\": \"94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c\"\n }\n }\n }\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".gitignore","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".gitignore","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"node_modules/","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fix auth.js: add API key support + remove upload endpoints from PUBLIC_PATHS","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update index.js: add CORS origin restriction via env var","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update .env and .env.example with API_KEY variable","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build MCP server (stdio, Claude desktop compatible)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Test: restart backend, verify API key auth and MCP connection","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now let me save relevant project context to memory:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"MEMORY.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"MEMORY.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"MEMORY.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"MEMORY.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Memory Index\n\n- [project_finance_hub.md](project_finance_hub.md) — Finance Hub architecture, auth design, MCP server, API key setup","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"project_finance_hub.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"project_finance_hub.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"35 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"---\nname: Finance Hub project state\ndescription: Architecture, auth design, API key, MCP server location and tools for the finance-hub project\ntype: project\n---\n\nFinance Hub is a personal finance tracker at `/volume2/docker/finance/finance-hub/`.\n\n**Running services** (as of 2026-05-09):\n- Backend: port 3001 (Express/Prisma, PostgreSQL)\n- Frontend: port 5175 (React/Vite)\n- Adminer: port 8092\n- Authentik: port 9100 (auth.lakylak.xyz, tag 2026.2.1)\n\n**Auth design:**\n- Production: NPM (Nginx Proxy Manager) + Authentik forward-auth outpost → injects `X-authentik-username` header\n- `DEV_BYPASS_AUTH=true` is currently set in `.env` — app runs without real auth\n- API key auth added: `Authorization: Bearer <API_KEY>` bypasses Authentik header check (used by MCP/scripts)\n- API_KEY in `.env`: `94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c`\n\n**Public endpoints** (no auth): `/api/health`, `/api/payments/ingest`\n\n**Security fix applied (2026-05-09):** Removed `/api/upload/csv` and `/api/upload/preview` from PUBLIC_PATHS — they were incorrectly public.\n\n**MCP server:** `/volume2/docker/finance/finance-hub/mcp/server.js`\n- Stdio transport, works with Claude desktop\n- Tools: list_transactions, spending_by_tag, get_transaction, list_tags, add_tag, remove_tag, health_check\n- Env: FINANCE_HUB_URL, FINANCE_HUB_API_KEY\n- Config example: `mcp/claude_desktop_config.example.json`\n\n**To enable real Authentik auth:** Set `DEV_BYPASS_AUTH=false` in `.env`, configure NPM proxy host for finance-hub with the Authentik NPM nginx snippet (see `/volume2/docker/finance/auth/README.md`).\n\n**Why:** Application had no production auth despite Authentik being available and running.\n**How to apply:** When asked about enabling auth or going to production, walk through NPM proxy + Authentik outpost steps from the README. API_KEY is already set for MCP.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Here's a full summary of what was done and the findings:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"What was built and fixed","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"What was built and fixed","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Security fixes","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Security fixes","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bug fixed:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/api/upload/csv","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"and","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/api/upload/preview","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"were in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PUBLIC_PATHS","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— anyone on the network could upload files without authentication. Both are now protected. Only","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/api/health","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"and","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/api/payments/ingest","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"remain public.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CORS restriction added:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"index.js","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"now reads","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CORS_ORIGIN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"from env. Set it to your frontend domain (e.g.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"https://finance.lakylak.xyz","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":") in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"for production.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"API key auth layer (backend/src/auth.js)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"API key auth layer (","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"backend/src/auth.js","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"backend/src/auth.js","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":")","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Requests with","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Authorization: Bearer <key>","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"are now validated before the Authentik header check. Set","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"API_KEY=","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(already has a generated key). Wrong key →","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"401","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"immediately (no fallthrough). This is what the MCP server and scripts use.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"MCP server (mcp/server.js)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"MCP server (","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"mcp/server.js","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"mcp/server.js","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":")","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stdio transport, works with Claude desktop. Tested live against the running backend. Tools:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tool","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"What it does","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"list_transactions","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Paginated list with all filters","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"spending_by_tag","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Aggregates spending by tag for a period","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"get_transaction","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Single record by ID","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"list_tags","depth":26,"on_screen":false,"role_description":"text"}]...
|
1236327308389593145
|
-6500787940164139005
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 10 pending changes
10
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
mcp
scripts
.env
.env.example
M
.gitignore
M
docker-compose.yml
M
README.md
sms_export.json
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
.env.example, preview, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
# ── Database ───────────────────────────────────────────────────────────────────
[ENV_SECRET]
# ── Notifier service ──────────────────────────────────────────────────────────
NOTIFIER_URL=[URL_WITH_CREDENTIALS]
# Secret key — generate with: openssl rand -base64 36
[ENV_SECRET]
# Public URL authentik is reachable at (used for redirects and the outpost)
AUTHENTIK_HOST=[URL_WITH_CREDENTIALS] version 2>/dev/null && node --version
Copy code to clipboard
OUT
Exit code 127
Bash
Verify public path configuration
IN
# Check if the upload endpoints are really public
grep -n 'PUBLIC_PATHS\|upload\|ingest' /volume2/docker/finance/finance-hub/backend/src/auth.js
Copy code to clipboard
OUT
<tool_use_error>Cancelled: parallel tool call Bash(npm view @modelcontextprotocol/sdk versi…) errored</tool_use_error>
Bash
Check node version and MCP SDK latest
IN
node --version 2>/dev/null && python3 -c "import urllib.request; import json; d=json.loads(urllib.request.urlopen('[URL_WITH_CREDENTIALS] "^1.29.0"
},
"engines": {
"node": ">=18"
}
}
Write
server.js
server.js
236 lines
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from '@modelcontextprotocol/sdk/types.js';
const BASE_URL = (process.env.FINANCE_HUB_URL || '[URL_WITH_CREDENTIALS] '^1.29.0'}
Thinking
Thinking
Good. Now let me test the MCP server can at least start and call the health check:
Bash
Smoke test MCP server startup
IN
FINANCE_HUB_URL=http://localhost:3001 [ENV_SECRET] \
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | timeout 5 node server.js 2>/dev/null | head -3 || echo "NODE test (expected timeout on stdin wait)"
Copy code to clipboard
OUT
{"result":{"tools":[{"name":"list_transactions","description":"List finance transactions with optional filters. Returns paginated results including total amount for the filtered set.","inputSchema":{"type":"object","properties":{"page":{"type":"number","description":"Page number (default 1)"},"limit":{"type":"number","description":"Results per page, max 200 (default 50)"},"dateFrom":{"type":"string","description":"Start date YYYY-MM-DD (inclusive)"},"dateTo":{"type":"string","description":"End date YYYY-MM-DD (inclusive)"},"tag":{"type":"string","description":"Filter by tag name"},"recipient":{"type":"string","description":"Substring match on payee name"},"type":{"type":"string","description":"Transaction type: POS | ATM | WALLET"},"source":{"type":"string","description":"Import source: INGEST | UPLOAD"},"search":{"type":"string","description":"Full-text search across rawMessage and recipient"},"hideBalanceAlerts":{"type":"boolean","description":"Exclude balance-notification SMS (default false)"},"sortBy":{"type":"string","description":"Sort field: date | amount | recipient | createdAt"},"sortDir":{"type":"string","description":"asc or desc (default desc)"}}}},{"name":"spending_by_tag","description":"Aggregate spending totals by tag for a date range. Fetches up to 200 transactions and groups them. Good for monthly summaries.","inputSchema":{"type":"object","properties":{"dateFrom":{"type":"string","description":"Start date YYYY-MM-DD"},"dateTo":{"type":"string","description":"End date YYYY-MM-DD"}}}},{"name":"get_transaction","description":"Get a single transaction by its numeric ID.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"number","description":"Transaction import ID"}}}},{"name":"list_tags","description":"List all available tags with their colors.","inputSchema":{"type":"object","properties":{}}},{"name":"add_tag","description":"Add a tag to a transaction. Creates the tag globally if it does not exist.","inputSchema":{"type":"object","required":["id","name"],"properties":{"id":{"type":"number","description":"Transaction ID"},"name":{"type":"string","description":"Tag name (e.g. \"Groceries\")"},"color":{"type":"string","description":"Hex color (e.g. \"#22c55e\"). Optional — auto-assigned if omitted."}}}},{"name":"remove_tag","description":"Remove a tag from a transaction.","inputSchema":{"type":"object","required":["id","tagId"],"properties":{"id":{"type":"number","description":"Transaction ID"},"tagId":{"type":"number","description":"Tag ID (from list_tags or the transaction object)"}}}},{"name":"health_check","description":"Check Finance Hub backend connectivity and database status.","inputSchema":{"type":"object","properties":{}}}]},"jsonrpc":"2.0","id":1}
Thinking
Thinking
MCP server responds correctly. Now test an actual tool call:
Bash
Test MCP health_check tool against live backend
IN
\
printf '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}\n{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"health_check","arguments":{}}}\n' | \
FINANCE_HUB_URL=http://localhost:3001 [ENV_SECRET] \
timeout 5 node server.js 2>/dev/null | tail -1 | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['result']['content'][0]['text'])"
Copy code to clipboard
OUT
{
"status": "ok",
"timestamp": "2026-05-09T16:19:09.977Z",
"storage": {
"type": "PostgreSQL",
"host": "db",
"database": "finance_hub"
}
}
Bash
Rebuild backend with API key auth changes
IN
# Test the API key auth directly against the backend (backend still has DEV_BYPASS_AUTH=true, need to restart first)
# First rebuild with the new code
cd /volume2/docker/finance/finance-hub && docker compose up -d --build backend 2>&1 | tail -8
Copy code to clipboard
OUT
time="2026-05-09T19:19:13+03:00" level=warning msg="/volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete"
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dfinance-hub%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied
Bash
Rebuild backend with sudo
IN
sudo docker compose -f /volume2/docker/finance/finance-hub/docker-compose.yml up -d --build backend 2>&1 | tail -10
Copy code to clipboard
OUT
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
sudo: a password is required
Thinking
Thinking
Docker needs sudo+password. Let me verify the auth changes are correct by testing the logic directly:
Bash
Unit test the auth middleware logic
IN
node - << 'EOF'
// Simulate the auth middleware logic
const [ENV_SECRET];
process.env.API_KEY = API_KEY;
const { authentikMiddleware } = require('/volume2/docker/finance/finance-hub/backend/src/auth.js');
function testReq(path, headers = {}) {
const res = { status(code) { this.code = code; return this; }, json(body) { return body; } };
const req = { path, headers };
let passed = false;
authentikMiddleware(req, res, () => { passed = true; });
return { passed, code: res.code, user: req.user };
}
// Public path — no auth needed
let r = testReq('/api/health', {});
console.assert(r.passed, 'health should be public');
console.log('✓ /api/health is public');
// Valid API key
r = testReq('/api/payments', { authorization: `Bearer ${API_KEY}` });
console.assert(r.passed, 'valid key should pass');
console.assert(r.user.username === 'api-key', 'api user');
console.log('✓ valid API key passes');
// Wrong API key
r = testReq('/api/payments', { authorization: 'Bearer wrongkey' });
console.assert(!r.passed, 'wrong key should fail');
console.assert(r.code === 401, '401 on bad key');
console.log('✓ wrong API key returns 401');
// No auth + no bypass + no authentik header
process.env.DEV_BYPASS_AUTH = 'false';
r = testReq('/api/payments', {});
console.assert(!r.passed && r.code === 401, 'no creds → 401');
console.log('✓ no credentials returns 401');
// Upload endpoints no longer public
r = testReq('/api/upload/csv', {});
console.assert(!r.passed && r.code === 401, 'upload/csv requires auth');
console.log('✓ /api/upload/csv now requires auth (was public, now fixed)');
// Authentik header pass-through
r = testReq('/api/payments', { 'x-authentik-username': 'lukastest', 'x-authentik-email': '[EMAIL]' });
console.assert(r.passed && r.user.username === 'lukastest', 'authentik header works');
console.log('✓ Authentik X-authentik-username header works');
console.log('\nAll auth tests passed.');
EOF
Copy code to clipboard
OUT
✓ /api/health is public
✓ valid API key passes
✓ wrong API key returns 401
✓ no credentials returns 401
✓ /api/upload/csv now requires auth (was public, now fixed)
✓ Authentik X-authentik-username header works
All auth tests passed.
All auth cases pass. Now test the MCP spending_by_tag tool against the live backend (with DEV_BYPASS_AUTH still on):
Bash
Test spending_by_tag MCP tool against live backend
IN
cd /volume2/docker/finance/finance-hub/mcp && \
printf '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}\n{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"spending_by_tag","arguments":{"dateFrom":"2026-05-01","dateTo":"2026-05-09"}}}\n' | \
FINANCE_HUB_URL=http://localhost:3001 [ENV_SECRET] \
timeout 8 node server.js 2>/dev/null | grep '"id":2' | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['result']['content'][0]['text'][:500])"
Copy code to clipboard
OUT
{
"period": {
"from": "2026-05-01",
"to": "2026-05-09"
},
"totalTransactions": 36,
"breakdown": [
{
"tag": "Bills",
"total": 117.9,
"count": 6
},
{
"tag": "(untagged)",
"total": 1153.87,
"count": 22
}
]
}
MCP tools work correctly against real data. Let me write the Claude desktop config example and the
.gitignore
for the mcp dir:
Write
claude_desktop_config.example.json
claude_desktop_config.example.json
14 lines
{
"_comment": "Add this block to ~/.config/claude/claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json)",
"mcpServers": {
"finance-hub": {
"command": "node",
"args": ["/volume2/docker/finance/finance-hub/mcp/server.js"],
"env": {
"FINANCE_HUB_URL": "http://localhost:3001",
"FINANCE_HUB_API_KEY": "94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c"
}
}
}
}
Write
.gitignore
.gitignore
2 lines
node_modules/
Update Todos
Fix auth.js: add API key support + remove upload endpoints from PUBLIC_PATHS
Update index.js: add CORS origin restriction via env var
Update .env and .env.example with API_KEY variable
Build MCP server (stdio, Claude desktop compatible)
Test: restart backend, verify API key auth and MCP connection
Now let me save relevant project context to memory:
Read
MEMORY.md
MEMORY.md
Write
MEMORY.md
MEMORY.md
4 lines
# Memory Index
- [project_finance_hub.md](project_finance_hub.md) — Finance Hub architecture, auth design, MCP server, API key setup
Write
project_finance_hub.md
project_finance_hub.md
35 lines
---
name: Finance Hub project state
description: Architecture, auth design, API key, MCP server location and tools for the finance-hub project
type: project
---
Finance Hub is a personal finance tracker at `/volume2/docker/finance/finance-hub/`.
**Running services** (as of 2026-05-09):
- Backend: port 3001 (Express/Prisma, PostgreSQL)
- Frontend: port 5175 (React/Vite)
- Adminer: port 8092
- Authentik: port 9100 (auth.lakylak.xyz, tag 2026.2.1)
**Auth design:**
- Production: NPM (Nginx Proxy Manager) + Authentik forward-auth outpost → injects `X-authentik-username` header
- `DEV_BYPASS_AUTH=true` is currently set in `.env` — app runs without real auth
- API key auth added: `Authorization: Bearer <API_KEY>` bypasses Authentik header check (used by MCP/scripts)
- API_KEY in `.env`: `94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c`
**Public endpoints** (no auth): `/api/health`, `/api/payments/ingest`
**Security fix applied (2026-05-09):** Removed `/api/upload/csv` and `/api/upload/preview` from PUBLIC_PATHS — they were incorrectly public.
**MCP server:** `/volume2/docker/finance/finance-hub/mcp/server.js`
- Stdio transport, works with Claude desktop
- Tools: list_transactions, spending_by_tag, get_transaction, list_tags, add_tag, remove_tag, health_check
- Env: FINANCE_HUB_URL, FINANCE_HUB_API_KEY
- Config example: `mcp/claude_desktop_config.example.json`
**To enable real Authentik auth:** Set `DEV_BYPASS_AUTH=false` in `.env`, configure NPM proxy host for finance-hub w...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
13881
|
619
|
34
|
2026-05-09T16:38:03.269463+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778344683269_m1.jpg...
|
Firefox
|
Providers - Admin - authentik — Personal
|
True
|
auth.lakylak.xyz/if/admin/#/core/providers
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Clo Pull requests · screenpipe/screenpipe · GitHub
Close tab
DNS / Nameservers | Hostinger
Close tab
Nginx Proxy Manager
Close tab
Screenpipe — Archive
Close tab
SQLite Web: archive.db
Close tab
SQLite Web: db.sqlite
Close tab
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
Close tab
DXP4800PLUS-B5F8
Close tab
AFFiNE - All In One KnowledgeOS
Close tab
All docs · AFFiNE
Close tab
Payments Logger
Close tab
Your old PC can run Windows 11 in a VM, but not on bare metal - [EMAIL] - Gmail
Close tab
Location Logger
Close tab
Finance Hub
Close tab
Finance Hub
Close tab
Select: transactions - db - Adminer
Close tab
Електронно банкиране ДСК Директ от Банка ДСК
Close tab
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Close tab
VIVACOM
Close tab
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Close tab
VIVACOM
Close tab
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Close tab
Claude Code | Claude Platform
Close tab
Claude
Close tab
lakylak/finance-hub - finance-hub - Gitea: Git with a cup of tea
Close tab
Providers - Admin - authentik
Close tab
New Tab
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Customize sidebar
Skip to content
Home
Providers
Provide support for protocols like SAML and OAuth to assigned applications.
Provide support for protocols like SAML and OAuth to assigned applications.
Toggle API requests drawer
Toggle notifications drawer
0
unread
Settings
Sign out
User interface
User interface
Dashboards
Collapse Dashboards
Dashboards
Overview
Overview
User Statistics
User Statistics
System Tasks
System Tasks
Applications
Collapse Applications
Applications
Applications
Applications
Providers
Providers
Outposts
Outposts
Endpoint Devices
Expand Endpoint Devices
Endpoint Devices
Events
Expand Events
Events
Customization
Expand Customization
Customization
Flows and Stages
Expand Flows and Stages
Flows and Stages
Directory
Expand Directory
Directory
System
Expand System
System
Enterprise
Expand Enterprise
Enterprise
Product name
authentik
Product version
Version 2026.2.1
Select all rows on page (0 of 3 selected)
Name
Sort by "Name"
Name
Application
Application
Type
Type
Row Actions
Actions
Select "Reminders Proxy" row
Reminders Proxy
Reminders Proxy
Assigned to application
Reminders
Reminders
Proxy Provider
Edit "Reminders Proxy" provider
Select "open-webui" row
open-webui
open-webui
Assigned to application
Open WebUI
Open WebUI
OAuth2/OpenID Provider
Edit "open-webui" provider
Select "reminders-mcp" row
reminders-mcp
reminders-mcp
Assigned to application
Reminders MCP
Reminders MCP
OAuth2/OpenID Provider
Edit "reminders-mcp" provider
Name
Sort by "Name"
Name
Reminders Proxy
Reminders Proxy
open-webui
open-webui
reminders-mcp
reminders-mcp
Application
Application
Assigned to application
Reminders
Reminders
Assigned to application
Open WebUI
Open WebUI
Assigned to application
Reminders MCP
Reminders MCP
Type
Type
Proxy Provider
OAuth2/OpenID Provider
OAuth2/OpenID Provider
Row Actions
Actions
Edit "Reminders Proxy" provider
Edit "open-webui" provider
Edit "reminders-mcp" provider
Last refreshed
26 seconds ago
1 - 3 of 3
1 - 3 of 3
Go to previous page
Go to next page
Close sidebar...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"DNS / Nameservers | Hostinger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Payments Logger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Your old PC can run Windows 11 in a VM, but not on bare metal - kovaliklukas@gmail.com - Gmail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Location Logger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Select: transactions - db - Adminer","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Claude Code | Claude Platform","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Claude","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"lakylak/finance-hub - finance-hub - Gitea: Git with a cup of tea","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Providers - Admin - authentik","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Skip to content","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Home","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Providers","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Provide support for protocols like SAML and OAuth to assigned applications.","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Provide support for protocols like SAML and OAuth to assigned applications.","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle API requests drawer","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Toggle notifications drawer","depth":10,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"unread","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Sign out","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"User interface","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"User interface","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Dashboards","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Dashboards","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Dashboards","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Overview","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Overview","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"User Statistics","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"User Statistics","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"System Tasks","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"System Tasks","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Applications","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Applications","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Applications","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Applications","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Applications","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Providers","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Providers","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Outposts","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Outposts","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Endpoint Devices","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand Endpoint Devices","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Endpoint Devices","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Events","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand Events","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Events","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Customization","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand Customization","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Customization","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Flows and Stages","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand Flows and Stages","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Flows and Stages","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Directory","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand Directory","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Directory","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"System","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand System","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"System","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Enterprise","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand Enterprise","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Enterprise","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Product name","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"authentik","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Product version","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Version 2026.2.1","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Select all rows on page (0 of 3 selected)","depth":14,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCell","text":"Name","depth":13,"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXButton","text":"Sort by \"Name\"","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Name","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Application","depth":13,"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Application","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Type","depth":13,"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Type","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Row Actions","depth":13,"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actions","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Select \"Reminders Proxy\" row","depth":13,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Reminders Proxy","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reminders Proxy","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assigned to application","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reminders","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reminders","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Proxy Provider","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit \"Reminders Proxy\" provider","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Select \"open-webui\" row","depth":13,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"open-webui","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"open-webui","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assigned to application","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open WebUI","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Open WebUI","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"OAuth2/OpenID Provider","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit \"open-webui\" provider","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Select \"reminders-mcp\" row","depth":13,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"reminders-mcp","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"reminders-mcp","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assigned to application","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reminders MCP","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reminders MCP","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"OAuth2/OpenID Provider","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit \"reminders-mcp\" provider","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCell","text":"Name","depth":12,"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXButton","text":"Sort by \"Name\"","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Name","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reminders Proxy","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reminders Proxy","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"open-webui","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"open-webui","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"reminders-mcp","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"reminders-mcp","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Application","depth":12,"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Application","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assigned to application","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reminders","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reminders","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assigned to application","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open WebUI","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Open WebUI","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assigned to application","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reminders MCP","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reminders MCP","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Type","depth":12,"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Type","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Proxy Provider","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"OAuth2/OpenID Provider","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"OAuth2/OpenID Provider","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Row Actions","depth":12,"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actions","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit \"Reminders Proxy\" provider","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit \"open-webui\" provider","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit \"reminders-mcp\" provider","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Last refreshed","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26 seconds ago","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1 - 3 of 3","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1 - 3 of 3","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Go to previous page","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Go to next page","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close sidebar","depth":6,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
3284610841427390961
|
-5042060737271589749
|
click
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Clo Pull requests · screenpipe/screenpipe · GitHub
Close tab
DNS / Nameservers | Hostinger
Close tab
Nginx Proxy Manager
Close tab
Screenpipe — Archive
Close tab
SQLite Web: archive.db
Close tab
SQLite Web: db.sqlite
Close tab
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
Close tab
DXP4800PLUS-B5F8
Close tab
AFFiNE - All In One KnowledgeOS
Close tab
All docs · AFFiNE
Close tab
Payments Logger
Close tab
Your old PC can run Windows 11 in a VM, but not on bare metal - [EMAIL] - Gmail
Close tab
Location Logger
Close tab
Finance Hub
Close tab
Finance Hub
Close tab
Select: transactions - db - Adminer
Close tab
Електронно банкиране ДСК Директ от Банка ДСК
Close tab
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Close tab
VIVACOM
Close tab
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Close tab
VIVACOM
Close tab
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Close tab
Claude Code | Claude Platform
Close tab
Claude
Close tab
lakylak/finance-hub - finance-hub - Gitea: Git with a cup of tea
Close tab
Providers - Admin - authentik
Close tab
New Tab
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Customize sidebar
Skip to content
Home
Providers
Provide support for protocols like SAML and OAuth to assigned applications.
Provide support for protocols like SAML and OAuth to assigned applications.
Toggle API requests drawer
Toggle notifications drawer
0
unread
Settings
Sign out
User interface
User interface
Dashboards
Collapse Dashboards
Dashboards
Overview
Overview
User Statistics
User Statistics
System Tasks
System Tasks
Applications
Collapse Applications
Applications
Applications
Applications
Providers
Providers
Outposts
Outposts
Endpoint Devices
Expand Endpoint Devices
Endpoint Devices
Events
Expand Events
Events
Customization
Expand Customization
Customization
Flows and Stages
Expand Flows and Stages
Flows and Stages
Directory
Expand Directory
Directory
System
Expand System
System
Enterprise
Expand Enterprise
Enterprise
Product name
authentik
Product version
Version 2026.2.1
Select all rows on page (0 of 3 selected)
Name
Sort by "Name"
Name
Application
Application
Type
Type
Row Actions
Actions
Select "Reminders Proxy" row
Reminders Proxy
Reminders Proxy
Assigned to application
Reminders
Reminders
Proxy Provider
Edit "Reminders Proxy" provider
Select "open-webui" row
open-webui
open-webui
Assigned to application
Open WebUI
Open WebUI
OAuth2/OpenID Provider
Edit "open-webui" provider
Select "reminders-mcp" row
reminders-mcp
reminders-mcp
Assigned to application
Reminders MCP
Reminders MCP
OAuth2/OpenID Provider
Edit "reminders-mcp" provider
Name
Sort by "Name"
Name
Reminders Proxy
Reminders Proxy
open-webui
open-webui
reminders-mcp
reminders-mcp
Application
Application
Assigned to application
Reminders
Reminders
Assigned to application
Open WebUI
Open WebUI
Assigned to application
Reminders MCP
Reminders MCP
Type
Type
Proxy Provider
OAuth2/OpenID Provider
OAuth2/OpenID Provider
Row Actions
Actions
Edit "Reminders Proxy" provider
Edit "open-webui" provider
Edit "reminders-mcp" provider
Last refreshed
26 seconds ago
1 - 3 of 3
1 - 3 of 3
Go to previous page
Go to next page
Close sidebar...
|
13879
|
NULL
|
NULL
|
NULL
|
|
13968
|
622
|
34
|
2026-05-09T16:43:11.564150+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778344991564_m2.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
0413\u0418\u042f | Debit: 0.09 EUR",
0413\u0418\u042f | Debit: 0.09 EUR",
"date": "2026-05-04T00:00:00.000Z",
"type": null,
"card": null,
"recipient": "\u0415\u041b\u0415\u041a\u0422P\u041e\u0425\u041e\u041b\u0414\u041fP\u041e\u0414\u0410\u0416\u0411\u0418/\u0414\u0421\u041a\u0414\u0418\u0420\u0415\u041a\u0422/\u0415\u041b.\u0415\u041d\u0415\u0420\u0413\u0418\u042f",
"amount": 0.09,
"currency": "EUR",
"balance": null,
"source": "UPLOAD",
"debitBgn": 0.09,
"creditBgn": null,
"transactionType": "\u041a\u041e\u041c\u0423\u041d\u0410\u041b\u041d\u0418 \u0423\u0421\u041b\u0423\u0413\u0418",
"payerAccount": "[IBAN]",
"autoTags": [
"Bills"
]
},
{
"rawMessage": "Date: 04.05.2026 | Type: \u041a\u041e\u041c\u0423\u041d\u0410\u041b\u041d\u0418 \u0423\u0421\u041b\u0423\u0413\u0418 | Payee: \u04210\u0424\u0418\u0419\u0421\u041a\u0410 \u0412\u041e\u0414\u0410 \u0414\u0421\u041a \u0414\u0418\u0420\u0415\u041a\u0422 | Debit: 29.54 EUR",
"date": "2026-05-04T00:00:00.000Z",
"type": null,
"card": null,
"recipient": "\u04210\u0424\u0418\u0419\u0421\u041a\u0410 \u0412\u041e\u0414\u0410 \u0414\u0421\u041a \u0414\u0418\u0420\u0415\u041a\u0422",
"amount": 29.54,
"currency": "EUR",
"balance": null,
"source": "UPLOAD",
"debitBgn": 29.54,
"creditBgn": null,
"transactionType": "\u041a\u041e\u041c\u0423\u041d\u0410\u041b\u041d\u0418 \u0423\u0421\u041b\u0423\u0413\u0418",
"payerAccount": "[IBAN]",
"autoTags": [
"Bills"
]
}
],
"total": 10,
"skipped": 0,
"errors": []
}
]
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/Downloads $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/Downloads $ curl -s -o /dev/null -w "%{http_code}" [URL_WITH_CREDENTIALS] ~/Downloads $ curl -s -H "Authorization: [AUTH_TOKEN]" \
https://finance-hub.lakylak.xyz/api/payments?limit=1 | head -50
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"0413\\u0418\\u042f | Debit: 0.09 EUR\",\n \"date\": \"2026-05-04T00:00:00.000Z\",\n \"type\": null,\n \"card\": null,\n \"recipient\": \"\\u0415\\u041b\\u0415\\u041a\\u0422P\\u041e\\u0425\\u041e\\u041b\\u0414\\u041fP\\u041e\\u0414\\u0410\\u0416\\u0411\\u0418/\\u0414\\u0421\\u041a\\u0414\\u0418\\u0420\\u0415\\u041a\\u0422/\\u0415\\u041b.\\u0415\\u041d\\u0415\\u0420\\u0413\\u0418\\u042f\",\n \"amount\": 0.09,\n \"currency\": \"EUR\",\n \"balance\": null,\n \"source\": \"UPLOAD\",\n \"debitBgn\": 0.09,\n \"creditBgn\": null,\n \"transactionType\": \"\\u041a\\u041e\\u041c\\u0423\\u041d\\u0410\\u041b\\u041d\\u0418 \\u0423\\u0421\\u041b\\u0423\\u0413\\u0418\",\n \"payerAccount\": \"BG15STSA93000004594031\",\n \"autoTags\": [\n \"Bills\"\n ]\n },\n {\n \"rawMessage\": \"Date: 04.05.2026 | Type: \\u041a\\u041e\\u041c\\u0423\\u041d\\u0410\\u041b\\u041d\\u0418 \\u0423\\u0421\\u041b\\u0423\\u0413\\u0418 | Payee: \\u04210\\u0424\\u0418\\u0419\\u0421\\u041a\\u0410 \\u0412\\u041e\\u0414\\u0410 \\u0414\\u0421\\u041a \\u0414\\u0418\\u0420\\u0415\\u041a\\u0422 | Debit: 29.54 EUR\",\n \"date\": \"2026-05-04T00:00:00.000Z\",\n \"type\": null,\n \"card\": null,\n \"recipient\": \"\\u04210\\u0424\\u0418\\u0419\\u0421\\u041a\\u0410 \\u0412\\u041e\\u0414\\u0410 \\u0414\\u0421\\u041a \\u0414\\u0418\\u0420\\u0415\\u041a\\u0422\",\n \"amount\": 29.54,\n \"currency\": \"EUR\",\n \"balance\": null,\n \"source\": \"UPLOAD\",\n \"debitBgn\": 29.54,\n \"creditBgn\": null,\n \"transactionType\": \"\\u041a\\u041e\\u041c\\u0423\\u041d\\u0410\\u041b\\u041d\\u0418 \\u0423\\u0421\\u041b\\u0423\\u0413\\u0418\",\n \"payerAccount\": \"BG03STSA93000045940400\",\n \"autoTags\": [\n \"Bills\"\n ]\n }\n ],\n \"total\": 10,\n \"skipped\": 0,\n \"errors\": []\n }\n]\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/Downloads $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/Downloads $ curl -s -o /dev/null -w \"%{http_code}\" https://finance-hub.lakylak.xyz/api/payments\n302% \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/Downloads $ curl -s https://finance-hub.lakylak.xyz/api/health\n{\"status\":\"ok\",\"timestamp\":\"2026-05-09T16:43:04.504Z\",\"storage\":{\"type\":\"PostgreSQL\",\"host\":\"db\",\"database\":\"finance_hub\"}}% lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/Downloads $ curl -s -H \"Authorization: Bearer 94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c\" \\\n https://finance-hub.lakylak.xyz/api/payments?limit=1 | head -50","depth":4,"bounds":{"left":0.2699468,"top":0.4309657,"width":0.4787234,"height":0.56903434},"on_screen":true,"value":"0413\\u0418\\u042f | Debit: 0.09 EUR\",\n \"date\": \"2026-05-04T00:00:00.000Z\",\n \"type\": null,\n \"card\": null,\n \"recipient\": \"\\u0415\\u041b\\u0415\\u041a\\u0422P\\u041e\\u0425\\u041e\\u041b\\u0414\\u041fP\\u041e\\u0414\\u0410\\u0416\\u0411\\u0418/\\u0414\\u0421\\u041a\\u0414\\u0418\\u0420\\u0415\\u041a\\u0422/\\u0415\\u041b.\\u0415\\u041d\\u0415\\u0420\\u0413\\u0418\\u042f\",\n \"amount\": 0.09,\n \"currency\": \"EUR\",\n \"balance\": null,\n \"source\": \"UPLOAD\",\n \"debitBgn\": 0.09,\n \"creditBgn\": null,\n \"transactionType\": \"\\u041a\\u041e\\u041c\\u0423\\u041d\\u0410\\u041b\\u041d\\u0418 \\u0423\\u0421\\u041b\\u0423\\u0413\\u0418\",\n \"payerAccount\": \"BG15STSA93000004594031\",\n \"autoTags\": [\n \"Bills\"\n ]\n },\n {\n \"rawMessage\": \"Date: 04.05.2026 | Type: \\u041a\\u041e\\u041c\\u0423\\u041d\\u0410\\u041b\\u041d\\u0418 \\u0423\\u0421\\u041b\\u0423\\u0413\\u0418 | Payee: \\u04210\\u0424\\u0418\\u0419\\u0421\\u041a\\u0410 \\u0412\\u041e\\u0414\\u0410 \\u0414\\u0421\\u041a \\u0414\\u0418\\u0420\\u0415\\u041a\\u0422 | Debit: 29.54 EUR\",\n \"date\": \"2026-05-04T00:00:00.000Z\",\n \"type\": null,\n \"card\": null,\n \"recipient\": \"\\u04210\\u0424\\u0418\\u0419\\u0421\\u041a\\u0410 \\u0412\\u041e\\u0414\\u0410 \\u0414\\u0421\\u041a \\u0414\\u0418\\u0420\\u0415\\u041a\\u0422\",\n \"amount\": 29.54,\n \"currency\": \"EUR\",\n \"balance\": null,\n \"source\": \"UPLOAD\",\n \"debitBgn\": 29.54,\n \"creditBgn\": null,\n \"transactionType\": \"\\u041a\\u041e\\u041c\\u0423\\u041d\\u0410\\u041b\\u041d\\u0418 \\u0423\\u0421\\u041b\\u0423\\u0413\\u0418\",\n \"payerAccount\": \"BG03STSA93000045940400\",\n \"autoTags\": [\n \"Bills\"\n ]\n }\n ],\n \"total\": 10,\n \"skipped\": 0,\n \"errors\": []\n }\n]\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/Downloads $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/Downloads $ curl -s -o /dev/null -w \"%{http_code}\" https://finance-hub.lakylak.xyz/api/payments\n302% \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/Downloads $ curl -s https://finance-hub.lakylak.xyz/api/health\n{\"status\":\"ok\",\"timestamp\":\"2026-05-09T16:43:04.504Z\",\"storage\":{\"type\":\"PostgreSQL\",\"host\":\"db\",\"database\":\"finance_hub\"}}% lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/Downloads $ curl -s -H \"Authorization: Bearer 94bb2917b9a1b9dcbaec49e7009c2a6b222fc310d32f530aa07e411e8d4a058c\" \\\n https://finance-hub.lakylak.xyz/api/payments?limit=1 | head -50","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.2699468,"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.27194148,"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 (-zsh)","depth":2,"bounds":{"left":0.33726728,"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.33926198,"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.40458778,"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.40658244,"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.47190824,"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.4739029,"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.53922874,"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.5412234,"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.60638297,"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.60837764,"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":"ssh","depth":2,"bounds":{"left":0.67353725,"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.6755319,"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.72706115,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.5036569,"top":1.0,"width":0.010970744,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
4023740076339351647
|
876685069520472519
|
click
|
accessibility
|
NULL
|
0413\u0418\u042f | Debit: 0.09 EUR",
0413\u0418\u042f | Debit: 0.09 EUR",
"date": "2026-05-04T00:00:00.000Z",
"type": null,
"card": null,
"recipient": "\u0415\u041b\u0415\u041a\u0422P\u041e\u0425\u041e\u041b\u0414\u041fP\u041e\u0414\u0410\u0416\u0411\u0418/\u0414\u0421\u041a\u0414\u0418\u0420\u0415\u041a\u0422/\u0415\u041b.\u0415\u041d\u0415\u0420\u0413\u0418\u042f",
"amount": 0.09,
"currency": "EUR",
"balance": null,
"source": "UPLOAD",
"debitBgn": 0.09,
"creditBgn": null,
"transactionType": "\u041a\u041e\u041c\u0423\u041d\u0410\u041b\u041d\u0418 \u0423\u0421\u041b\u0423\u0413\u0418",
"payerAccount": "[IBAN]",
"autoTags": [
"Bills"
]
},
{
"rawMessage": "Date: 04.05.2026 | Type: \u041a\u041e\u041c\u0423\u041d\u0410\u041b\u041d\u0418 \u0423\u0421\u041b\u0423\u0413\u0418 | Payee: \u04210\u0424\u0418\u0419\u0421\u041a\u0410 \u0412\u041e\u0414\u0410 \u0414\u0421\u041a \u0414\u0418\u0420\u0415\u041a\u0422 | Debit: 29.54 EUR",
"date": "2026-05-04T00:00:00.000Z",
"type": null,
"card": null,
"recipient": "\u04210\u0424\u0418\u0419\u0421\u041a\u0410 \u0412\u041e\u0414\u0410 \u0414\u0421\u041a \u0414\u0418\u0420\u0415\u041a\u0422",
"amount": 29.54,
"currency": "EUR",
"balance": null,
"source": "UPLOAD",
"debitBgn": 29.54,
"creditBgn": null,
"transactionType": "\u041a\u041e\u041c\u0423\u041d\u0410\u041b\u041d\u0418 \u0423\u0421\u041b\u0423\u0413\u0418",
"payerAccount": "[IBAN]",
"autoTags": [
"Bills"
]
}
],
"total": 10,
"skipped": 0,
"errors": []
}
]
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/Downloads $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/Downloads $ curl -s -o /dev/null -w "%{http_code}" [URL_WITH_CREDENTIALS] ~/Downloads $ curl -s -H "Authorization: [AUTH_TOKEN]" \
https://finance-hub.lakylak.xyz/api/payments?limit=1 | head -50
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
14168
|
630
|
34
|
2026-05-09T17:02:30.243217+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778346150243_m2.jpg...
|
Firefox
|
Nginx Proxy Manager — Personal
|
True
|
http://192.168.0.242:81/nginx/proxy
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Clo Pull requests · screenpipe/screenpipe · GitHub
Close tab
DNS / Nameservers | Hostinger
Close tab
Nginx Proxy Manager
Close tab
Screenpipe — Archive
Close tab
SQLite Web: archive.db
Close tab
SQLite Web: db.sqlite
Close tab
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
Close tab
DXP4800PLUS-B5F8
Close tab
AFFiNE - All In One KnowledgeOS
Close tab
All docs · AFFiNE
Close tab
Payments Logger
Close tab
Your old PC can run Windows 11 in a VM, but not on bare metal - [EMAIL] - Gmail
Close tab
Location Logger
Close tab
Finance Hub
Close tab
Finance Hub
Close tab
Select: transactions - db - Adminer
Close tab
Claude Code | Claude Platform
Close tab
Claude
Close tab
lakylak/finance-hub - finance-hub - Gitea: Git with a cup of tea
Close tab
Applications - Admin - authentik
Close tab
New Tab
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Customize sidebar
Nginx Proxy Manager
Nginx Proxy Manager
Admin Administrator
Admin
Administrator
Dashboard
Dashboard
Hosts
Hosts
Access Lists
Access Lists
SSL Certificates
SSL Certificates
Users
Users
Audit Log
Audit Log
Settings
Settings
Proxy Hosts
Proxy Hosts
Search Host…
Add Proxy Host
Add Proxy Host
SOURCE
DESTINATION
SSL
ACCESS
STATUS
ai.chat.lakylak.xyz
Created: 10th March 2026
http://[IP_ADDRESS]:11000
Let's Encrypt
Public
Online
app.lakylak.xyz
Created: 19th July 2025
http://[IP_ADDRESS]:18083
Let's Encrypt
Public
Online
app.payments.lakylak.xyz
Created: 14th February 2026
http://[IP_ADDRESS]:5174
Let's Encrypt
Public
Online
app.screenpipe.lakylak.xyz
Created: 27th April 2026
http://[IP_ADDRESS]:8766
Let's Encrypt
Public
Online
audiobook.lakylak.xyz
Created: 15th June 2025
http://192.168..242:13378
Let's Encrypt
Public
Online
auth.lakylak.xyz
Created: 30th March 2026
http://[IP_ADDRESS]:9100
Let's Encrypt
Public
Online
backup.lakylak.xyz
Created: 10th July 2025
http://[IP_ADDRESS]:9999
Let's Encrypt
Public
Online
beszel.lakylak.xyz
Created: 6th December 2025
http://[IP_ADDRESS]:8095
Let's Encrypt
Public
Online
bitwarden.lakylak.xyz
Created: 16th June 2025
http://[IP_ADDRESS]:9890
Let's Encrypt
Public
Online
book.lakylak.xyz
Created: 31st October 2025
http://[IP_ADDRESS]:6060
Let's Encrypt
Public
Online
crm.lakylak.xyz
Created: 25th July 2025
http://[IP_ADDRESS]:3353
Let's Encrypt
Public
Online
dawarich.lakylak.xyz
Created: 25th August 2025
http://[IP_ADDRESS]:3000
Let's Encrypt
Public
Online
db.screenpipe.lakylak.xyz
Created: 27th April 2026
http://[IP_ADDRESS]:8767
Let's Encrypt
Public
Online
dsk-uploader.lakylak.xyz
Created: 15th August 2025
http://[IP_ADDRESS]:8502
Let's Encrypt
Public
Online
finance-hub.lakylak.xyz
Created: 8th May 2026
http://[IP_ADDRESS]:5175
Let's Encrypt
Public
Online
gitea.lakylak.xyz
Created: 18th July 2025
http://[IP_ADDRESS]:3052
Let's Encrypt
Public
Online
hydra.lakylak.xyz
Created: 29th March 2026
http://[IP_ADDRESS]:4444
Let's Encrypt
Public
Online
images.lakylak.xyz
Created: 17th June 2025
http://[IP_ADDRESS]:3474
Let's Encrypt
Public
Online
immich.lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:8212
Let's Encrypt
Public
Online
jellyfin.lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:8096
Let's Encrypt
Public
Online
lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:9999
Let's Encrypt
Public
Online
linkwarden.lakylak.xyz
Created: 13th December 2025
http://[IP_ADDRESS]:7461
Let's Encrypt
Public
Online
location-tracker.lakylak.xyz
Created: 30th August 2025
http://[IP_ADDRESS]:8050
Let's Encrypt
Public
Online
log.lakylak.xyz
Created: 23rd September 2025
http://[IP_ADDRESS]:18084
Let's Encrypt
Public
Online
login.lakylak.xyz
Created: 29th March 2026
http://[IP_ADDRESS]:4446
Let's Encrypt
Public
Online
mcp.location.lakylak.xyz
Created: 15th March 2026
http://[IP_ADDRESS]:8052
Let's Encrypt
Public
Online
n8n.lakylak.xyz
Created: 17th July 2025
http://[IP_ADDRESS]:5678
Let's Encrypt
Public
Online
nas.lakylak.xyz
Created: 28th July 2025
http://[IP_ADDRESS]:9999
Let's Encrypt
Public
Online
notes.lakylak.xyz
Created: 31st October 2025
http://[IP_ADDRESS]:8085
Let's Encrypt
Public
Online
obsidian.lakylak.xyz
Created: 17th June 2025
http://[IP_ADDRESS]:3421
Let's Encrypt
Public
Online
outfit.lakylak.xyz
Created: 25th March 2026
http://[IP_ADDRESS]:8667
Let's Encrypt
Public
Online
owntracks.lakylak.xyz
Created: 12th August 2025
http://[IP_ADDRESS]:8083
Let's Encrypt
Public
Online
paperless.lakylak.xyz
Created: 25th October 2025
http://[IP_ADDRESS]:8777
Let's Encrypt
Public
Online
payments.lakylak.xyz
Created: 14th February 2026
http://[IP_ADDRESS]:3010
Let's Encrypt
Public
Online
pdf.lakylak.xyz
Created: 19th June 2025
http://[IP_ADDRESS]:7890
Let's Encrypt
Public
Online
portainer.lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:9000
Let's Encrypt
Public
Online
sqlite.screenpipe.lakylak.xyz
Created: 27th April 2026
http://[IP_ADDRESS]:8768
Let's Encrypt
Public
Online
todo.lakylak.xyz
Created: 16th March 2026
http://reminder-app:8000
Let's Encrypt
Public
Online
tree.lakylak.xyz
Created: 19th December 2025
http://[IP_ADDRESS]:8200
Let's Encrypt
Public
Online
trilium.lakylak.xyz
Created: 24th December 2025
http://[IP_ADDRESS]:4292
Let's Encrypt
Public
Online
tube.lakylak.xyz
Created: 3rd December 2025
http://[IP_ADDRESS]:8770
Let's Encrypt
Public
Online
ytber.lakylak.xyz
Created: 11th March 2026
http://[IP_ADDRESS]:8100
Let's Encrypt
Public
Online
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.0518755,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"DNS / Nameservers | Hostinger","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.08459697,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.11731844,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.15003991,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.18276137,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.21548285,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.2482043,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.28092578,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.31364724,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.3463687,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Payments Logger","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.3790902,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Your old PC can run Windows 11 in a VM, but not on bare metal - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.41181165,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Location Logger","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.4445331,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.4772546,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.509976,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Select: transactions - db - Adminer","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.54269755,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Claude Code | Claude Platform","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.575419,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Claude","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.60814047,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"lakylak/finance-hub - finance-hub - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.6408619,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Applications - Admin - authentik","depth":4,"bounds":{"left":0.0,"top":0.6735834,"width":0.016123671,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0006648936,"top":0.6735834,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.70790106,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.8547486,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.8858739,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.9134078,"width":0.016123671,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.0,"top":0.9413408,"width":0.016123671,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.9688747,"width":0.016123671,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Nginx Proxy Manager","depth":8,"bounds":{"left":0.09391622,"top":0.061452515,"width":0.06648936,"height":0.03471668},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":9,"bounds":{"left":0.10455452,"top":0.06783719,"width":0.055851065,"height":0.018355945},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Admin Administrator","depth":8,"bounds":{"left":0.4424867,"top":0.06584198,"width":0.042386968,"height":0.02593775},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Admin","depth":10,"bounds":{"left":0.45977393,"top":0.06424581,"width":0.013630319,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Administrator","depth":11,"bounds":{"left":0.45977393,"top":0.07980846,"width":0.025099734,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" Dashboard","depth":10,"bounds":{"left":0.09391622,"top":0.10654429,"width":0.028590426,"height":0.044293694},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.09391622,"top":0.122505985,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dashboard","depth":11,"bounds":{"left":0.09990027,"top":0.12051077,"width":0.022606382,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" Hosts","depth":10,"bounds":{"left":0.13048537,"top":0.10654429,"width":0.01761968,"height":0.044293694},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.13048537,"top":0.122505985,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hosts","depth":11,"bounds":{"left":0.13646941,"top":0.12051077,"width":0.011635638,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" Access Lists","depth":10,"bounds":{"left":0.15608378,"top":0.10654429,"width":0.030086435,"height":0.044293694},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.15608378,"top":0.122505985,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Access Lists","depth":11,"bounds":{"left":0.16206782,"top":0.12051077,"width":0.024102394,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" SSL Certificates","depth":10,"bounds":{"left":0.19414894,"top":0.10654429,"width":0.038231384,"height":0.044293694},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.19414894,"top":0.122505985,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SSL Certificates","depth":11,"bounds":{"left":0.20013298,"top":0.12051077,"width":0.032247342,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" Users","depth":10,"bounds":{"left":0.24035904,"top":0.10654429,"width":0.017453458,"height":0.044293694},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.24035904,"top":0.122505985,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Users","depth":11,"bounds":{"left":0.24634309,"top":0.12051077,"width":0.011469414,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" Audit Log","depth":10,"bounds":{"left":0.26579124,"top":0.10654429,"width":0.025598405,"height":0.044293694},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.26579124,"top":0.122505985,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Audit Log","depth":11,"bounds":{"left":0.27177528,"top":0.12051077,"width":0.019614361,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" Settings","depth":10,"bounds":{"left":0.29936835,"top":0.10654429,"width":0.022938829,"height":0.044293694},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.29936835,"top":0.122505985,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.3053524,"top":0.12051077,"width":0.016954787,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Proxy Hosts","depth":9,"bounds":{"left":0.1022274,"top":0.1839585,"width":0.029089095,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Proxy Hosts","depth":10,"bounds":{"left":0.1022274,"top":0.18355946,"width":0.029089095,"height":0.018355945},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":11,"bounds":{"left":0.36319813,"top":0.1867518,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search Host…","depth":10,"bounds":{"left":0.35904256,"top":0.18156424,"width":0.06898271,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"","depth":9,"bounds":{"left":0.43068483,"top":0.18156424,"width":0.011469414,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":10,"bounds":{"left":0.43367687,"top":0.1867518,"width":0.005485372,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Add Proxy Host","depth":9,"bounds":{"left":0.44481382,"top":0.18156424,"width":0.034408245,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add Proxy Host","depth":10,"bounds":{"left":0.44780585,"top":0.1859537,"width":0.028424202,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SOURCE","depth":12,"bounds":{"left":0.12084442,"top":0.22306465,"width":0.016289894,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DESTINATION","depth":12,"bounds":{"left":0.22207446,"top":0.22306465,"width":0.02642952,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SSL","depth":12,"bounds":{"left":0.32413563,"top":0.22306465,"width":0.0071476065,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ACCESS","depth":12,"bounds":{"left":0.3801529,"top":0.22306465,"width":0.01512633,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATUS","depth":12,"bounds":{"left":0.41722074,"top":0.22306465,"width":0.014960106,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ai.chat.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.25897846,"width":0.03025266,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 10th March 2026","depth":13,"bounds":{"left":0.12084442,"top":0.28052673,"width":0.045877658,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:11000","depth":13,"bounds":{"left":0.22207446,"top":0.26735833,"width":0.055518616,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.26735833,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.26735833,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.26735833,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.26735833,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.26855546,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.31843576,"width":0.02543218,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 19th July 2025","depth":13,"bounds":{"left":0.12084442,"top":0.33998403,"width":0.042386968,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:18083","depth":13,"bounds":{"left":0.22207446,"top":0.3272147,"width":0.055518616,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.3272147,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.3272147,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.3272147,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.3272147,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.32841182,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.payments.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.37789306,"width":0.04288564,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 14th February 2026","depth":13,"bounds":{"left":0.12084442,"top":0.39944133,"width":0.05119681,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:5174","depth":13,"bounds":{"left":0.22207446,"top":0.386672,"width":0.053025264,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.386672,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.386672,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.386672,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.386672,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.38786912,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.screenpipe.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.43774942,"width":0.04488032,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 27th April 2026","depth":13,"bounds":{"left":0.12084442,"top":0.4592977,"width":0.043218084,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8766","depth":13,"bounds":{"left":0.22207446,"top":0.4461293,"width":0.053025264,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.4461293,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.4461293,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.4461293,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.4461293,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.44732642,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"audiobook.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.49720672,"width":0.03723404,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th June 2025","depth":13,"bounds":{"left":0.12084442,"top":0.51875496,"width":0.043716755,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168..242:13378","depth":13,"bounds":{"left":0.22207446,"top":0.5059856,"width":0.053025264,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.5059856,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.5059856,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.5059856,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.5059856,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.5071828,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"auth.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.556664,"width":0.026761968,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 30th March 2026","depth":13,"bounds":{"left":0.12084442,"top":0.5786113,"width":0.045877658,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:9100","depth":13,"bounds":{"left":0.22207446,"top":0.5654429,"width":0.053025264,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.5654429,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.5654429,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.5654429,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.5654429,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.5666401,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"backup.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.61652035,"width":0.03125,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 10th July 2025","depth":13,"bounds":{"left":0.12084442,"top":0.6380686,"width":0.042386968,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.243:9999","depth":13,"bounds":{"left":0.22207446,"top":0.6249002,"width":0.053025264,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.6249002,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.6249002,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.6249002,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.6249002,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.6260974,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"beszel.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.67597765,"width":0.029587766,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 6th December 2025","depth":13,"bounds":{"left":0.12084442,"top":0.6975259,"width":0.05119681,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8095","depth":13,"bounds":{"left":0.22207446,"top":0.6847566,"width":0.053025264,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.6847566,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.6847566,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.6847566,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.6847566,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.68595374,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"bitwarden.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.73543495,"width":0.036236703,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 16th June 2025","depth":13,"bounds":{"left":0.12084442,"top":0.7573823,"width":0.043716755,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:9890","depth":13,"bounds":{"left":0.22207446,"top":0.7442139,"width":0.053025264,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.7442139,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.7442139,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.7442139,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.7442139,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.74541104,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"book.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.7952913,"width":0.027593086,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 31st October 2025","depth":13,"bounds":{"left":0.12084442,"top":0.8168396,"width":0.04886968,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:6060","depth":13,"bounds":{"left":0.22207446,"top":0.8036712,"width":0.053025264,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.8036712,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.8036712,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.8036712,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.8036712,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.80486834,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"crm.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.8547486,"width":0.025598405,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 25th July 2025","depth":13,"bounds":{"left":0.12084442,"top":0.8762969,"width":0.042386968,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:3353","depth":13,"bounds":{"left":0.22207446,"top":0.86352754,"width":0.053025264,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.86352754,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.86352754,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.86352754,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.86352754,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.86472464,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dawarich.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.91460496,"width":0.034408245,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 25th August 2025","depth":13,"bounds":{"left":0.12084442,"top":0.93615323,"width":0.04720745,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:3000","depth":13,"bounds":{"left":0.22207446,"top":0.92298484,"width":0.053025264,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.92298484,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.92298484,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.92298484,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.92298484,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.92418194,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"db.screenpipe.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":0.97406226,"width":0.04288564,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 27th April 2026","depth":13,"bounds":{"left":0.12084442,"top":0.99561054,"width":0.043218084,"height":0.004389465},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8767","depth":13,"bounds":{"left":0.22207446,"top":0.9828412,"width":0.053025264,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":0.9828412,"width":0.026928192,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":0.9828412,"width":0.013131649,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":0.9828412,"width":0.014793883,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":0.9828412,"width":0.004986702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":0.9840383,"width":0.004986702,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dsk-uploader.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":1.0,"width":0.04089096,"height":-0.033519506},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th August 2025","depth":13,"bounds":{"left":0.12084442,"top":1.0,"width":0.04720745,"height":-0.055067778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8502","depth":13,"bounds":{"left":0.22207446,"top":1.0,"width":0.053025264,"height":-0.042298436},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.32413563,"top":1.0,"width":0.026928192,"height":-0.042298436},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.3801529,"top":1.0,"width":0.013131649,"height":-0.042298436},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.421875,"top":1.0,"width":0.014793883,"height":-0.042298436},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.4715758,"top":1.0,"width":0.004986702,"height":-0.042298436},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.4715758,"top":1.0,"width":0.004986702,"height":-0.043495655},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"finance-hub.lakylak.xyz","depth":12,"bounds":{"left":0.12350399,"top":1.0,"width":0.0390625,"height":-0.09337592},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 8th May 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:5175","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gitea.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 18th July 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:3052","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"hydra.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 29th March 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:4444","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"images.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 17th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:3474","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"immich.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8212","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"jellyfin.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8096","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:9999","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"linkwarden.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 13th December 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:7461","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"location-tracker.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 30th August 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8050","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"log.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 23rd September 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:18084","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"login.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 29th March 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:4446","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mcp.location.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th March 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8052","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"n8n.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 17th July 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:5678","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"nas.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 28th July 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:9999","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"notes.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 31st October 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8085","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"obsidian.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 17th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:3421","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"outfit.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 25th March 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8667","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"owntracks.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 12th August 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8083","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"paperless.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 25th October 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8777","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"payments.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 14th February 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:3010","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"pdf.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 19th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:7890","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"portainer.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:9000","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sqlite.screenpipe.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 27th April 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8768","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"todo.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 16th March 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://reminder-app:8000","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tree.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 19th December 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8200","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"trilium.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 24th December 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:4292","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tube.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 3rd December 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8770","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ytber.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 11th March 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8100","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-6878435994317771269
|
-4931691133007908545
|
click
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Clo Pull requests · screenpipe/screenpipe · GitHub
Close tab
DNS / Nameservers | Hostinger
Close tab
Nginx Proxy Manager
Close tab
Screenpipe — Archive
Close tab
SQLite Web: archive.db
Close tab
SQLite Web: db.sqlite
Close tab
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
Close tab
DXP4800PLUS-B5F8
Close tab
AFFiNE - All In One KnowledgeOS
Close tab
All docs · AFFiNE
Close tab
Payments Logger
Close tab
Your old PC can run Windows 11 in a VM, but not on bare metal - [EMAIL] - Gmail
Close tab
Location Logger
Close tab
Finance Hub
Close tab
Finance Hub
Close tab
Select: transactions - db - Adminer
Close tab
Claude Code | Claude Platform
Close tab
Claude
Close tab
lakylak/finance-hub - finance-hub - Gitea: Git with a cup of tea
Close tab
Applications - Admin - authentik
Close tab
New Tab
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Customize sidebar
Nginx Proxy Manager
Nginx Proxy Manager
Admin Administrator
Admin
Administrator
Dashboard
Dashboard
Hosts
Hosts
Access Lists
Access Lists
SSL Certificates
SSL Certificates
Users
Users
Audit Log
Audit Log
Settings
Settings
Proxy Hosts
Proxy Hosts
Search Host…
Add Proxy Host
Add Proxy Host
SOURCE
DESTINATION
SSL
ACCESS
STATUS
ai.chat.lakylak.xyz
Created: 10th March 2026
http://[IP_ADDRESS]:11000
Let's Encrypt
Public
Online
app.lakylak.xyz
Created: 19th July 2025
http://[IP_ADDRESS]:18083
Let's Encrypt
Public
Online
app.payments.lakylak.xyz
Created: 14th February 2026
http://[IP_ADDRESS]:5174
Let's Encrypt
Public
Online
app.screenpipe.lakylak.xyz
Created: 27th April 2026
http://[IP_ADDRESS]:8766
Let's Encrypt
Public
Online
audiobook.lakylak.xyz
Created: 15th June 2025
http://192.168..242:13378
Let's Encrypt
Public
Online
auth.lakylak.xyz
Created: 30th March 2026
http://[IP_ADDRESS]:9100
Let's Encrypt
Public
Online
backup.lakylak.xyz
Created: 10th July 2025
http://[IP_ADDRESS]:9999
Let's Encrypt
Public
Online
beszel.lakylak.xyz
Created: 6th December 2025
http://[IP_ADDRESS]:8095
Let's Encrypt
Public
Online
bitwarden.lakylak.xyz
Created: 16th June 2025
http://[IP_ADDRESS]:9890
Let's Encrypt
Public
Online
book.lakylak.xyz
Created: 31st October 2025
http://[IP_ADDRESS]:6060
Let's Encrypt
Public
Online
crm.lakylak.xyz
Created: 25th July 2025
http://[IP_ADDRESS]:3353
Let's Encrypt
Public
Online
dawarich.lakylak.xyz
Created: 25th August 2025
http://[IP_ADDRESS]:3000
Let's Encrypt
Public
Online
db.screenpipe.lakylak.xyz
Created: 27th April 2026
http://[IP_ADDRESS]:8767
Let's Encrypt
Public
Online
dsk-uploader.lakylak.xyz
Created: 15th August 2025
http://[IP_ADDRESS]:8502
Let's Encrypt
Public
Online
finance-hub.lakylak.xyz
Created: 8th May 2026
http://[IP_ADDRESS]:5175
Let's Encrypt
Public
Online
gitea.lakylak.xyz
Created: 18th July 2025
http://[IP_ADDRESS]:3052
Let's Encrypt
Public
Online
hydra.lakylak.xyz
Created: 29th March 2026
http://[IP_ADDRESS]:4444
Let's Encrypt
Public
Online
images.lakylak.xyz
Created: 17th June 2025
http://[IP_ADDRESS]:3474
Let's Encrypt
Public
Online
immich.lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:8212
Let's Encrypt
Public
Online
jellyfin.lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:8096
Let's Encrypt
Public
Online
lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:9999
Let's Encrypt
Public
Online
linkwarden.lakylak.xyz
Created: 13th December 2025
http://[IP_ADDRESS]:7461
Let's Encrypt
Public
Online
location-tracker.lakylak.xyz
Created: 30th August 2025
http://[IP_ADDRESS]:8050
Let's Encrypt
Public
Online
log.lakylak.xyz
Created: 23rd September 2025
http://[IP_ADDRESS]:18084
Let's Encrypt
Public
Online
login.lakylak.xyz
Created: 29th March 2026
http://[IP_ADDRESS]:4446
Let's Encrypt
Public
Online
mcp.location.lakylak.xyz
Created: 15th March 2026
http://[IP_ADDRESS]:8052
Let's Encrypt
Public
Online
n8n.lakylak.xyz
Created: 17th July 2025
http://[IP_ADDRESS]:5678
Let's Encrypt
Public
Online
nas.lakylak.xyz
Created: 28th July 2025
http://[IP_ADDRESS]:9999
Let's Encrypt
Public
Online
notes.lakylak.xyz
Created: 31st October 2025
http://[IP_ADDRESS]:8085
Let's Encrypt
Public
Online
obsidian.lakylak.xyz
Created: 17th June 2025
http://[IP_ADDRESS]:3421
Let's Encrypt
Public
Online
outfit.lakylak.xyz
Created: 25th March 2026
http://[IP_ADDRESS]:8667
Let's Encrypt
Public
Online
owntracks.lakylak.xyz
Created: 12th August 2025
http://[IP_ADDRESS]:8083
Let's Encrypt
Public
Online
paperless.lakylak.xyz
Created: 25th October 2025
http://[IP_ADDRESS]:8777
Let's Encrypt
Public
Online
payments.lakylak.xyz
Created: 14th February 2026
http://[IP_ADDRESS]:3010
Let's Encrypt
Public
Online
pdf.lakylak.xyz
Created: 19th June 2025
http://[IP_ADDRESS]:7890
Let's Encrypt
Public
Online
portainer.lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:9000
Let's Encrypt
Public
Online
sqlite.screenpipe.lakylak.xyz
Created: 27th April 2026
http://[IP_ADDRESS]:8768
Let's Encrypt
Public
Online
todo.lakylak.xyz
Created: 16th March 2026
http://reminder-app:8000
Let's Encrypt
Public
Online
tree.lakylak.xyz
Created: 19th December 2025
http://[IP_ADDRESS]:8200
Let's Encrypt
Public
Online
trilium.lakylak.xyz
Created: 24th December 2025
http://[IP_ADDRESS]:4292
Let's Encrypt
Public
Online
tube.lakylak.xyz
Created: 3rd December 2025
http://[IP_ADDRESS]:8770
Let's Encrypt
Public
Online
ytber.lakylak.xyz
Created: 11th March 2026
http://[IP_ADDRESS]:8100
Let's Encrypt
Public
Online
...
|
14166
|
NULL
|
NULL
|
NULL
|
|
14175
|
629
|
34
|
2026-05-09T17:02:54.451619+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778346174451_m1.jpg...
|
Firefox
|
Nginx Proxy Manager — Personal
|
True
|
http://192.168.0.242:81/nginx/proxy
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Clo Pull requests · screenpipe/screenpipe · GitHub
Close tab
DNS / Nameservers | Hostinger
Close tab
Nginx Proxy Manager
Close tab
Screenpipe — Archive
Close tab
SQLite Web: archive.db
Close tab
SQLite Web: db.sqlite
Close tab
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
Close tab
DXP4800PLUS-B5F8
Close tab
AFFiNE - All In One KnowledgeOS
Close tab
All docs · AFFiNE
Close tab
Payments Logger
Close tab
Your old PC can run Windows 11 in a VM, but not on bare metal - [EMAIL] - Gmail
Close tab
Location Logger
Close tab
Finance Hub
Close tab
Finance Hub
Close tab
Select: transactions - db - Adminer
Close tab
Claude Code | Claude Platform
Close tab
Claude
Close tab
lakylak/finance-hub - finance-hub - Gitea: Git with a cup of tea
Close tab
Applications - Admin - authentik
Close tab
New Tab
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Customize sidebar
Nginx Proxy Manager
Nginx Proxy Manager
Admin Administrator
Admin
Administrator
Dashboard
Dashboard
Hosts
Hosts
Access Lists
Access Lists
SSL Certificates
SSL Certificates
Users
Users
Audit Log
Audit Log
Settings
Settings
Proxy Hosts
Proxy Hosts
Search Host…
Add Proxy Host
Add Proxy Host
SOURCE
DESTINATION
SSL
ACCESS
STATUS
ai.chat.lakylak.xyz
Created: 10th March 2026
http://[IP_ADDRESS]:11000
Let's Encrypt
Public
Online
app.lakylak.xyz
Created: 19th July 2025
http://[IP_ADDRESS]:18083
Let's Encrypt
Public
Online
app.payments.lakylak.xyz
Created: 14th February 2026
http://[IP_ADDRESS]:5174
Let's Encrypt
Public
Online
app.screenpipe.lakylak.xyz
Created: 27th April 2026
http://[IP_ADDRESS]:8766
Let's Encrypt
Public
Online
audiobook.lakylak.xyz
Created: 15th June 2025
http://192.168..242:13378
Let's Encrypt
Public
Online
auth.lakylak.xyz
Created: 30th March 2026
http://[IP_ADDRESS]:9100
Let's Encrypt
Public
Online
backup.lakylak.xyz
Created: 10th July 2025
http://[IP_ADDRESS]:9999
Let's Encrypt
Public
Online
beszel.lakylak.xyz
Created: 6th December 2025
http://[IP_ADDRESS]:8095
Let's Encrypt
Public
Online
bitwarden.lakylak.xyz
Created: 16th June 2025
http://[IP_ADDRESS]:9890
Let's Encrypt
Public
Online
book.lakylak.xyz
Created: 31st October 2025
http://[IP_ADDRESS]:6060
Let's Encrypt
Public
Online
crm.lakylak.xyz
Created: 25th July 2025
http://[IP_ADDRESS]:3353
Let's Encrypt
Public
Online
dawarich.lakylak.xyz
Created: 25th August 2025
http://[IP_ADDRESS]:3000
Let's Encrypt
Public
Online
db.screenpipe.lakylak.xyz
Created: 27th April 2026
http://[IP_ADDRESS]:8767
Let's Encrypt
Public
Online
dsk-uploader.lakylak.xyz
Created: 15th August 2025
http://[IP_ADDRESS]:8502
Let's Encrypt
Public
Online
finance-hub.lakylak.xyz
Created: 8th May 2026
http://[IP_ADDRESS]:5175
Let's Encrypt
Public
Online
gitea.lakylak.xyz
Created: 18th July 2025
http://[IP_ADDRESS]:3052
Let's Encrypt
Public
Online
hydra.lakylak.xyz
Created: 29th March 2026
http://[IP_ADDRESS]:4444
Let's Encrypt
Public
Online
images.lakylak.xyz
Created: 17th June 2025
http://[IP_ADDRESS]:3474
Let's Encrypt
Public
Online
immich.lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:8212
Let's Encrypt
Public
Online
jellyfin.lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:8096
Let's Encrypt
Public
Online
lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:9999
Let's Encrypt
Public
Online
linkwarden.lakylak.xyz
Created: 13th December 2025
http://[IP_ADDRESS]:7461
Let's Encrypt
Public
Online
location-tracker.lakylak.xyz
Created: 30th August 2025
http://[IP_ADDRESS]:8050
Let's Encrypt
Public
Online
log.lakylak.xyz
Created: 23rd September 2025
http://[IP_ADDRESS]:18084
Let's Encrypt
Public
Online
login.lakylak.xyz
Created: 29th March 2026
http://[IP_ADDRESS]:4446
Let's Encrypt
Public
Online
mcp.location.lakylak.xyz
Created: 15th March 2026
http://[IP_ADDRESS]:8052
Let's Encrypt
Public
Online
n8n.lakylak.xyz
Created: 17th July 2025
http://[IP_ADDRESS]:5678
Let's Encrypt
Public
Online
nas.lakylak.xyz
Created: 28th July 2025
http://[IP_ADDRESS]:9999
Let's Encrypt
Public
Online
notes.lakylak.xyz
Created: 31st October 2025
http://[IP_ADDRESS]:8085
Let's Encrypt
Public
Online
obsidian.lakylak.xyz
Created: 17th June 2025
http://[IP_ADDRESS]:3421
Let's Encrypt
Public
Online
outfit.lakylak.xyz
Created: 25th March 2026
http://[IP_ADDRESS]:8667
Let's Encrypt
Public
Online
owntracks.lakylak.xyz
Created: 12th August 2025
http://[IP_ADDRESS]:8083
Let's Encrypt
Public
Online
paperless.lakylak.xyz
Created: 25th October 2025
http://[IP_ADDRESS]:8777
Let's Encrypt
Public
Online
payments.lakylak.xyz
Created: 14th February 2026
http://[IP_ADDRESS]:3010
Let's Encrypt
Public
Online
pdf.lakylak.xyz
Created: 19th June 2025
http://[IP_ADDRESS]:7890
Let's Encrypt
Public
Online
portainer.lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:9000
Let's Encrypt
Public
Online
sqlite.screenpipe.lakylak.xyz
Created: 27th April 2026
http://[IP_ADDRESS]:8768
Let's Encrypt
Public
Online
todo.lakylak.xyz
Created: 16th March 2026
http://reminder-app:8000
Let's Encrypt
Public
Online
tree.lakylak.xyz
Created: 19th December 2025
http://[IP_ADDRESS]:8200
Let's Encrypt
Public
Online
trilium.lakylak.xyz
Created: 24th December 2025
http://[IP_ADDRESS]:4292
Let's Encrypt
Public
Online
tube.lakylak.xyz
Created: 3rd December 2025
http://[IP_ADDRESS]:8770
Let's Encrypt
Public
Online
ytber.lakylak.xyz...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"DNS / Nameservers | Hostinger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Payments Logger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Your old PC can run Windows 11 in a VM, but not on bare metal - kovaliklukas@gmail.com - Gmail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Location Logger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Select: transactions - db - Adminer","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Claude Code | Claude Platform","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Claude","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"lakylak/finance-hub - finance-hub - Gitea: Git with a cup of tea","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Applications - Admin - authentik","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Nginx Proxy Manager","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Admin Administrator","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Admin","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Administrator","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" Dashboard","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dashboard","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" Hosts","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hosts","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" Access Lists","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Access Lists","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" SSL Certificates","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SSL Certificates","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" Users","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Users","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" Audit Log","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Audit Log","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":" Settings","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Proxy Hosts","depth":9,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Proxy Hosts","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search Host…","depth":10,"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Add Proxy Host","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add Proxy Host","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SOURCE","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DESTINATION","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SSL","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ACCESS","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATUS","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ai.chat.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 10th March 2026","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:11000","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 19th July 2025","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:18083","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.payments.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 14th February 2026","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:5174","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.screenpipe.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 27th April 2026","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8766","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"audiobook.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th June 2025","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168..242:13378","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"auth.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 30th March 2026","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:9100","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"backup.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 10th July 2025","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.243:9999","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"beszel.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 6th December 2025","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8095","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"bitwarden.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 16th June 2025","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:9890","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"book.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 31st October 2025","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:6060","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"crm.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 25th July 2025","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:3353","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dawarich.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 25th August 2025","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:3000","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"db.screenpipe.lakylak.xyz","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 27th April 2026","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8767","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.0,"width":0.05625,"height":0.021666666},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.0,"width":0.027430555,"height":0.021666666},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.0,"width":0.030902777,"height":0.021666666},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.0,"width":0.010416667,"height":0.021666666},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.0,"width":0.010416667,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dsk-uploader.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th August 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8502","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.05888889,"width":0.05625,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.05888889,"width":0.027430555,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.05888889,"width":0.030902777,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.05888889,"width":0.010416667,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.060555555,"width":0.010416667,"height":0.017222222},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"finance-hub.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 8th May 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:5175","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.14166667,"width":0.05625,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.14166667,"width":0.027430555,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.14166667,"width":0.030902777,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.14166667,"width":0.010416667,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.14333333,"width":0.010416667,"height":0.017222222},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gitea.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 18th July 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:3052","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.225,"width":0.05625,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.225,"width":0.027430555,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.225,"width":0.030902777,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.225,"width":0.010416667,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.22666667,"width":0.010416667,"height":0.017222222},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"hydra.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 29th March 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:4444","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.3077778,"width":0.05625,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.3077778,"width":0.027430555,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.3077778,"width":0.030902777,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.3077778,"width":0.010416667,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.30944446,"width":0.010416667,"height":0.017222222},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"images.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 17th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:3474","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.39055556,"width":0.05625,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.39055556,"width":0.027430555,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.39055556,"width":0.030902777,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.39055556,"width":0.010416667,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.39222223,"width":0.010416667,"height":0.017222222},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"immich.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8212","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.47388887,"width":0.05625,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.47388887,"width":0.027430555,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.47388887,"width":0.030902777,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.47388887,"width":0.010416667,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.47555557,"width":0.010416667,"height":0.017222222},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"jellyfin.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8096","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.5566667,"width":0.05625,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.5566667,"width":0.027430555,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.5566667,"width":0.030902777,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.5566667,"width":0.010416667,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.55833334,"width":0.010416667,"height":0.017222222},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:9999","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.64,"width":0.05625,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.64,"width":0.027430555,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.64,"width":0.030902777,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.64,"width":0.010416667,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.64166665,"width":0.010416667,"height":0.017222222},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"linkwarden.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 13th December 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:7461","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.7227778,"width":0.05625,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.7227778,"width":0.027430555,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.7227778,"width":0.030902777,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.7227778,"width":0.010416667,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.72444445,"width":0.010416667,"height":0.017222222},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"location-tracker.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 30th August 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8050","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.8055556,"width":0.05625,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.8055556,"width":0.027430555,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.8055556,"width":0.030902777,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.8055556,"width":0.010416667,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.80722225,"width":0.010416667,"height":0.017222222},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"log.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 23rd September 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:18084","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.8888889,"width":0.05625,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.8888889,"width":0.027430555,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.8888889,"width":0.030902777,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.8888889,"width":0.010416667,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.89055556,"width":0.010416667,"height":0.017222222},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"login.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 29th March 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:4446","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":0.9716667,"width":0.05625,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":0.9716667,"width":0.027430555,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":0.9716667,"width":0.030902777,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":0.9716667,"width":0.010416667,"height":0.021666666},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":0.97333336,"width":0.010416667,"height":0.017222222},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mcp.location.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th March 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8052","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"bounds":{"left":0.1125,"top":1.0,"width":0.05625,"height":-0.054444432},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"bounds":{"left":0.22951388,"top":1.0,"width":0.027430555,"height":-0.054444432},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"bounds":{"left":0.31666666,"top":1.0,"width":0.030902777,"height":-0.054444432},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.42048612,"top":1.0,"width":0.010416667,"height":-0.054444432},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.42048612,"top":1.0,"width":0.010416667,"height":-0.056111097},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"n8n.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 17th July 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:5678","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"nas.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 28th July 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:9999","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"notes.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 31st October 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8085","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"obsidian.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 17th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:3421","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"outfit.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 25th March 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8667","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"owntracks.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 12th August 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8083","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"paperless.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 25th October 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8777","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"payments.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 14th February 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:3010","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"pdf.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 19th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:7890","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"portainer.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 15th June 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:9000","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sqlite.screenpipe.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 27th April 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8768","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"todo.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 16th March 2026","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://reminder-app:8000","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tree.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 19th December 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8200","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"trilium.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 24th December 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:4292","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tube.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created: 3rd December 2025","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://192.168.0.242:8770","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Let's Encrypt","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Public","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ytber.lakylak.xyz","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
7654908539019120163
|
-4931691133008957121
|
click
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Clo Pull requests · screenpipe/screenpipe · GitHub
Close tab
DNS / Nameservers | Hostinger
Close tab
Nginx Proxy Manager
Close tab
Screenpipe — Archive
Close tab
SQLite Web: archive.db
Close tab
SQLite Web: db.sqlite
Close tab
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
Close tab
DXP4800PLUS-B5F8
Close tab
AFFiNE - All In One KnowledgeOS
Close tab
All docs · AFFiNE
Close tab
Payments Logger
Close tab
Your old PC can run Windows 11 in a VM, but not on bare metal - [EMAIL] - Gmail
Close tab
Location Logger
Close tab
Finance Hub
Close tab
Finance Hub
Close tab
Select: transactions - db - Adminer
Close tab
Claude Code | Claude Platform
Close tab
Claude
Close tab
lakylak/finance-hub - finance-hub - Gitea: Git with a cup of tea
Close tab
Applications - Admin - authentik
Close tab
New Tab
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Customize sidebar
Nginx Proxy Manager
Nginx Proxy Manager
Admin Administrator
Admin
Administrator
Dashboard
Dashboard
Hosts
Hosts
Access Lists
Access Lists
SSL Certificates
SSL Certificates
Users
Users
Audit Log
Audit Log
Settings
Settings
Proxy Hosts
Proxy Hosts
Search Host…
Add Proxy Host
Add Proxy Host
SOURCE
DESTINATION
SSL
ACCESS
STATUS
ai.chat.lakylak.xyz
Created: 10th March 2026
http://[IP_ADDRESS]:11000
Let's Encrypt
Public
Online
app.lakylak.xyz
Created: 19th July 2025
http://[IP_ADDRESS]:18083
Let's Encrypt
Public
Online
app.payments.lakylak.xyz
Created: 14th February 2026
http://[IP_ADDRESS]:5174
Let's Encrypt
Public
Online
app.screenpipe.lakylak.xyz
Created: 27th April 2026
http://[IP_ADDRESS]:8766
Let's Encrypt
Public
Online
audiobook.lakylak.xyz
Created: 15th June 2025
http://192.168..242:13378
Let's Encrypt
Public
Online
auth.lakylak.xyz
Created: 30th March 2026
http://[IP_ADDRESS]:9100
Let's Encrypt
Public
Online
backup.lakylak.xyz
Created: 10th July 2025
http://[IP_ADDRESS]:9999
Let's Encrypt
Public
Online
beszel.lakylak.xyz
Created: 6th December 2025
http://[IP_ADDRESS]:8095
Let's Encrypt
Public
Online
bitwarden.lakylak.xyz
Created: 16th June 2025
http://[IP_ADDRESS]:9890
Let's Encrypt
Public
Online
book.lakylak.xyz
Created: 31st October 2025
http://[IP_ADDRESS]:6060
Let's Encrypt
Public
Online
crm.lakylak.xyz
Created: 25th July 2025
http://[IP_ADDRESS]:3353
Let's Encrypt
Public
Online
dawarich.lakylak.xyz
Created: 25th August 2025
http://[IP_ADDRESS]:3000
Let's Encrypt
Public
Online
db.screenpipe.lakylak.xyz
Created: 27th April 2026
http://[IP_ADDRESS]:8767
Let's Encrypt
Public
Online
dsk-uploader.lakylak.xyz
Created: 15th August 2025
http://[IP_ADDRESS]:8502
Let's Encrypt
Public
Online
finance-hub.lakylak.xyz
Created: 8th May 2026
http://[IP_ADDRESS]:5175
Let's Encrypt
Public
Online
gitea.lakylak.xyz
Created: 18th July 2025
http://[IP_ADDRESS]:3052
Let's Encrypt
Public
Online
hydra.lakylak.xyz
Created: 29th March 2026
http://[IP_ADDRESS]:4444
Let's Encrypt
Public
Online
images.lakylak.xyz
Created: 17th June 2025
http://[IP_ADDRESS]:3474
Let's Encrypt
Public
Online
immich.lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:8212
Let's Encrypt
Public
Online
jellyfin.lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:8096
Let's Encrypt
Public
Online
lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:9999
Let's Encrypt
Public
Online
linkwarden.lakylak.xyz
Created: 13th December 2025
http://[IP_ADDRESS]:7461
Let's Encrypt
Public
Online
location-tracker.lakylak.xyz
Created: 30th August 2025
http://[IP_ADDRESS]:8050
Let's Encrypt
Public
Online
log.lakylak.xyz
Created: 23rd September 2025
http://[IP_ADDRESS]:18084
Let's Encrypt
Public
Online
login.lakylak.xyz
Created: 29th March 2026
http://[IP_ADDRESS]:4446
Let's Encrypt
Public
Online
mcp.location.lakylak.xyz
Created: 15th March 2026
http://[IP_ADDRESS]:8052
Let's Encrypt
Public
Online
n8n.lakylak.xyz
Created: 17th July 2025
http://[IP_ADDRESS]:5678
Let's Encrypt
Public
Online
nas.lakylak.xyz
Created: 28th July 2025
http://[IP_ADDRESS]:9999
Let's Encrypt
Public
Online
notes.lakylak.xyz
Created: 31st October 2025
http://[IP_ADDRESS]:8085
Let's Encrypt
Public
Online
obsidian.lakylak.xyz
Created: 17th June 2025
http://[IP_ADDRESS]:3421
Let's Encrypt
Public
Online
outfit.lakylak.xyz
Created: 25th March 2026
http://[IP_ADDRESS]:8667
Let's Encrypt
Public
Online
owntracks.lakylak.xyz
Created: 12th August 2025
http://[IP_ADDRESS]:8083
Let's Encrypt
Public
Online
paperless.lakylak.xyz
Created: 25th October 2025
http://[IP_ADDRESS]:8777
Let's Encrypt
Public
Online
payments.lakylak.xyz
Created: 14th February 2026
http://[IP_ADDRESS]:3010
Let's Encrypt
Public
Online
pdf.lakylak.xyz
Created: 19th June 2025
http://[IP_ADDRESS]:7890
Let's Encrypt
Public
Online
portainer.lakylak.xyz
Created: 15th June 2025
http://[IP_ADDRESS]:9000
Let's Encrypt
Public
Online
sqlite.screenpipe.lakylak.xyz
Created: 27th April 2026
http://[IP_ADDRESS]:8768
Let's Encrypt
Public
Online
todo.lakylak.xyz
Created: 16th March 2026
http://reminder-app:8000
Let's Encrypt
Public
Online
tree.lakylak.xyz
Created: 19th December 2025
http://[IP_ADDRESS]:8200
Let's Encrypt
Public
Online
trilium.lakylak.xyz
Created: 24th December 2025
http://[IP_ADDRESS]:4292
Let's Encrypt
Public
Online
tube.lakylak.xyz
Created: 3rd December 2025
http://[IP_ADDRESS]:8770
Let's Encrypt
Public
Online
ytber.lakylak.xyz...
|
14173
|
NULL
|
NULL
|
NULL
|
|
14475
|
643
|
34
|
2026-05-09T18:00:18.825377+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778349618825_m1.jpg...
|
iTerm2
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
CodeFileEditSelectionView→Nginx Proxy Manager@Scre CodeFileEditSelectionView→Nginx Proxy Manager@Screenpipe - ArchiveSQLite Web: archive.dbSQLite Web: db.sqlitescreenpipe/.claude/skills at main - screenpipe/screenpDXP4800PLUS-B5F8AFFiNE - All In One KnowledgeOSAll docs • AFFiNEPayments LoggerM Your old PC can run Windows 11 in a VM, but not on baLocation LoggerFinance HubFinance HubSelect: transactions - db - AdminerClaude Code | Claude Platform* April 2026 spending by category - Claudelakylak/finance-hub - finance-hub - Gitea: Git with a c• Applications - Admin - authentik+ New TabGoRunTerminalWindow Helpnas.lakylak.xyz/desktop/?os=ugospro#/FilesControl PanelPRIIStorageApp Center/logsLogsSupportQ Search|Connection & AccessUser ManagementFile ServiceW DeviceConnectionDomain/LDAP• TerminalGeneral|• Hardware & PowerTime & Language- NetworkSecurityE Indexing ServiceService• AboutE: Control Panel‹ $0lallLA100% C8Sat 9 May 21:00:19OU AMI6ZTE?TelnetSSHEnablePort 23|Advanced settings• EnablePort22Shut down automatically3h later2026-05-09 21:18 will automatically shut downAdvanced settingsFunction descriptionyaswvord fir tie logi accoum ange nabie aute ok eo enhanice sysfeum secuitis recomended to sel a strongApply...
|
NULL
|
8495873388118599212
|
NULL
|
visual_change
|
ocr
|
NULL
|
CodeFileEditSelectionView→Nginx Proxy Manager@Scre CodeFileEditSelectionView→Nginx Proxy Manager@Screenpipe - ArchiveSQLite Web: archive.dbSQLite Web: db.sqlitescreenpipe/.claude/skills at main - screenpipe/screenpDXP4800PLUS-B5F8AFFiNE - All In One KnowledgeOSAll docs • AFFiNEPayments LoggerM Your old PC can run Windows 11 in a VM, but not on baLocation LoggerFinance HubFinance HubSelect: transactions - db - AdminerClaude Code | Claude Platform* April 2026 spending by category - Claudelakylak/finance-hub - finance-hub - Gitea: Git with a c• Applications - Admin - authentik+ New TabGoRunTerminalWindow Helpnas.lakylak.xyz/desktop/?os=ugospro#/FilesControl PanelPRIIStorageApp Center/logsLogsSupportQ Search|Connection & AccessUser ManagementFile ServiceW DeviceConnectionDomain/LDAP• TerminalGeneral|• Hardware & PowerTime & Language- NetworkSecurityE Indexing ServiceService• AboutE: Control Panel‹ $0lallLA100% C8Sat 9 May 21:00:19OU AMI6ZTE?TelnetSSHEnablePort 23|Advanced settings• EnablePort22Shut down automatically3h later2026-05-09 21:18 will automatically shut downAdvanced settingsFunction descriptionyaswvord fir tie logi accoum ange nabie aute ok eo enhanice sysfeum secuitis recomended to sel a strongApply...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
15025
|
672
|
34
|
2026-05-11T06:10:06.758761+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778479806758_m1.jpg...
|
PhpStorm
|
faVsco.js – Hubspot/Service.php
|
True
|
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
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
7
48
1
33
1
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Services\Crm\Hubspot;
use Carbon\Carbon;
use Exception;
use Generator;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Support\Facades\Cache;
use InvalidArgumentException;
use Jiminny\Contracts\Repositories\TeamRepository;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\HubspotInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SavePlaybackLinkToCrmInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Contracts\Services\Crm\VerifyTaskExistsInterface;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\HttpNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contact;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Models\Crm\Field;
use Jiminny\Models\Crm\FieldData;
use Jiminny\Models\Crm\Layout;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Participant;
use Jiminny\Models\Playbook;
use Jiminny\Models\SocialAccount;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Repositories\Crm\FieldRepository;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\ParticipantRepository;
use Jiminny\Services\Avatar\ProspectPhotoPathService;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\Hubspot\Actions\SyncArchivedProfilesAction;
use Jiminny\Services\Crm\Hubspot\Fields\ValueNormalizer;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\OpportunitySyncTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\SyncFieldsTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\WriteCrmTrait;
use Jiminny\Services\Crm\MatchDomainByEmailInterface;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Services\Crm\ResolveCompanyNameByEmailTrait;
use Jiminny\Utils\PlaybackUrlBuilder;
use Sentry;
use SevenShores\Hubspot\Exceptions\BadRequest;
use Throwable;
use UnexpectedValueException;
/**
* @phpstan-type CrmFieldDefinition array{
* name: string,
* label: string,
* description: string,
* type: string,
* fieldType: string,
* hidden: bool,
* showCurrencySymbol: bool,
* options: array<array{
* id: string,
* label: string,
* value?: string,
* }
*/
class Service extends BaseService implements
HubspotInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
SendSummaryToCrmInterface,
MatchDomainByEmailInterface,
SavePlaybackLinkToCrmInterface,
RemoteEntityManipulationInterface,
FetchRelatedActivityInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
VerifyTaskExistsInterface
{
use ResolveCompanyNameByEmailTrait;
use SyncCrmEntitiesTrait;
use WriteCrmTrait;
use SyncFieldsTrait;
use OpportunitySyncTrait;
private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;
private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';
private const int BATCH_UPDATE_LIMIT = 100;
private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';
private const int TEN_SECONDLY_ROLLING_LIMIT = 10;
private const string TYPE_NOTE = 'NOTE';
private const string TYPE_MEETING = 'MEETING';
private const string TYPE_CALL = 'CALL';
private const string API_URL = '[URL_WITH_CREDENTIALS] ClientInterface|Client
*/
protected $client;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected ProspectPhotoPathService $prospectPhotoPathService;
private SyncFieldAction $syncFieldAction;
private PayloadBuilder $payloadBuilder;
private SyncRelatedActivityManager $syncRelatedActivityManager;
private SyncArchivedProfilesAction $syncArchivedProfilesAction;
private WebhookSyncBatchProcessor $batchProcessor;
public function __construct(
Client $client,
SyncFieldAction $syncFieldAction,
PayloadBuilder $payloadBuilder,
ProspectPhotoPathService $prospectPhotoPathService,
SyncArchivedProfilesAction $syncArchivedProfilesAction,
WebhookSyncBatchProcessor $batchProcessor,
) {
parent::__construct();
$this->client = $client;
$this->syncFieldAction = $syncFieldAction;
$this->prospectPhotoPathService = $prospectPhotoPathService;
$this->payloadBuilder = $payloadBuilder;
$this->syncArchivedProfilesAction = $syncArchivedProfilesAction;
$this->batchProcessor = $batchProcessor;
$this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [
'client' => $this->client,
]);
$this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [
'client' => $this->client,
'payloadBuilder' => $this->payloadBuilder,
'logger' => $this->logger,
]);
$this->crmEntityRepository = app(CrmEntityRepository::class);
$this->dealFieldsService = app(DealFieldsService::class);
}
public function getDisplayName(): string
{
return 'HubSpot';
}
protected function getOAuthAccount(User $user): ?SocialAccount
{
// In this case, the Account Owner is always the connection for any API operations.
$owner = $user->team->owner;
return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);
}
public function getClient(): Client
{
/** @var Client */
return $this->client;
}
/**
* Convert raw field data into a format compatible with CRM APIs.
*
* @param bool $internal Direction of the conversion.
* True is pulling from CRM, false normalize before sending to CRM.
*/
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return ValueNormalizer::normalize(
fieldType: $fieldType,
fieldValue: $fieldValue,
isInbound: $internal,
);
}
/**
* @inheritdoc
*/
public function getDefaultFields(string $activityType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
$defaultFields = FieldDefinitions::defaultTaskFields();
// This lazy creates these fields if not already setup.
foreach ($defaultFields as $defaultField) {
$fields[] = $this->config->fields()->firstOrCreate($defaultField);
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function getDefaultActivityField(string $activityType): Field
{
/** @var Field $activityField */
$activityField = $this->config->fields()->where([
'crm_provider_id' => 'activityType',
'object_type' => $activityType,
])->first();
return $activityField;
}
/**
* @inheritdoc
*/
public function getSupportedPlaybookTypes(): array
{
return [Playbook::ACTIVITY_TYPE_TASK];
}
/**
* @inheritdoc
*/
public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
// Outcome should always be provided calls/meetings.
$fieldData = [
[
'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',
'object_type' => Field::OBJECT_TASK,
],
];
foreach ($fieldData as $data) {
$field = $this->config->fields()->where($data)->first();
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
}
return $fields;
}
public function getDealInsightsFields(): array
{
return FieldDefinitions::dealInsightsFields();
}
protected function getDefaultFollowupLayoutFields(string $activityType): array
{
$fields = [];
$fieldRepo = app(FieldRepository::class);
$fieldData = FieldDefinitions::followupFieldsFilter();
foreach ($fieldData as $data) {
$field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function syncField(Field $field): void
{
switch ($field->object_type) {
case Field::OBJECT_ACCOUNT:
$crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_CONTACT:
$crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_OPPORTUNITY:
$crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_TASK:
$this->syncSingleTaskField($field);
return;
default:
return;
}
$this->syncFieldAction->execute($field, $crmField->toArray());
}
/**
* @param array<array{
* id:string,
* label:string,
* value?:string
* }> $options
*
* @throws CrmException
*
* @return FieldData[]
*
*/
public function importPicklistValues(
Field $field,
array $options = [['id' => '', 'label' => '', 'value' => '']],
): array {
if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {
// We already have the options, no need to fetch them again
return $this->importOptions($field, $options);
}
$options = [];
switch ($field->getObjectType()) {
case Field::OBJECT_ACCOUNT:
$options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());
break;
case Field::OBJECT_CONTACT:
$options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());
break;
case Field::OBJECT_OPPORTUNITY:
// Hubspot has different endpoint for stages
$options = $this->getClient()->fetchOpportunityFieldOptions($field);
break;
case Field::OBJECT_TASK:
if ($field->getCrmProviderId() === 'disposition') {
$options = $this->getClient()->fetchDispositionFieldOptions();
} elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {
$options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);
}
break;
default:
$this->logger->warning('Invalid object type', [
'object_type' => $field->getObjectType(),
'field_id' => $field->getId(),
]);
throw new CrmException('Invalid object type');
}
return $this->importOptions($field, $options);
}
/**
* @inheritdoc
*/
public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage
{
$missingStage = null;
try {
// Use the HubSpot API client instead of the SDK crmPipelines() method
$endpoint = self::getDealsPipelinesEndpoint();
$pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);
$pipelines = $pipelinesResponse->data->results;
} catch (RequestException|BadRequest $exception) {
throw $exception;
}
foreach ($pipelines as $pipeline) {
$stages = [];
// We create a business process to contain the pipeline, and store all stages against it.
$p = ResponseNormalize::normalizePipeline($pipeline);
// Create/update business process for this pipeline
$businessProcess = $this->config->businessProcesses()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'type' => BusinessProcess::TYPE_OPPORTUNITY,
'is_selectable' => $p['active'],
]);
// A record type is really a clone of the business process, used to store which record uses which pipeline.
// Create/update record type clone
$this->config->recordTypes()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'is_selectable' => $p['active'],
'business_process_id' => $businessProcess->id ?? null,
]);
// Stages - fetch all existing stages upfront to avoid N+1 queries
$existingStages = $this->config->stages()
->withTrashed()
->where('type', Stage::TYPE_OPPORTUNITY)
->get()
->keyBy('crm_provider_id');
foreach ($p['stages'] as $dealStage) {
$s = ResponseNormalize::normalizeDealStage($dealStage);
/** @var ?Stage $existingStage */
$existingStage = $existingStages->get($s['id']);
// Restore soft-deleted stages that are now active in HubSpot
if ($existingStage?->trashed() && $s['active']) {
$existingStage->restore();
}
// Upsert stage (updates soft-deleted records without restoring them)
$stage = $this->config->stages()->withTrashed()->updateOrCreate([
'crm_provider_id' => $s['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($s['label'], 0, 50),
'label' => mb_strimwidth($s['label'], 0, 191),
'type' => Stage::TYPE_OPPORTUNITY,
'sequence' => $s['displayOrder'],
'is_selectable' => $s['active'],
'probability' => $s['probability'] * 100,
]);
if ($missingStageName === $s['id']) {
$missingStage = $stage;
}
$stages[] = $stage->id;
}
$businessProcess->stages()->sync($stages);
}
return $missingStage;
}
/**
* @inheritdoc
*/
public function syncOrganization(): void
{
try {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function find(string $name, array $scopes): array
{
$count = $this->limit ?? 20;
$offset = $this->offset ?? 0;
/** @var array<int, array<string, mixed>> */
return Cache::remember(
key: $this->team->getId() . $name . $count . $offset,
ttl: 300,
callback: function () use ($name, $offset, $count): array {
$data = [];
// Use the new V3 API to find contacts based on additional fields.
foreach (['companies', 'contacts'] as $objectType) {
$payload = $this->generateNameSearchPayload($name, $offset, $count);
$type = $objectType === 'companies' ? 'account' : 'contact';
try {
$response = $this->client->search($objectType, $payload);
// Build mapped list.
foreach ($response['results'] as $object) {
$properties = $object['properties'];
$objectName = $this->buildContactName($properties);
$record = [
'crmId' => $object['id'],
// Pass crmUrl to the FE, needed for success message in the extension when you log activity.
'crmUrl' => $this->generateProviderUrl($object['id'], $type),
'name' => $objectName,
'prospectType' => $type,
'phoneNumbers' => [],
];
if ($type === 'account') {
$record['industry'] = $properties['industry'] ?? null;
} else {
$record['title'] = $properties['jobtitle'] ?? null;
$record['organization'] = $properties['company'] ?? null;
}
$countryCode = $this->buildContactCountry($properties);
$parsedNumber = $this->buildContactPhone($countryCode, $properties);
// Add phone number to record.
if (! empty($parsedNumber['phone'])) {
$record['phoneNumbers'][] = [
'number' => $parsedNumber['phone'],
'nationalFormat' => phone_national($countryCode, $parsedNumber['phone']),
'type' => 'phone',
];
}
// Add mobile phone number to record.
if (! empty($properties['mobilephone'])) {
$mobileNumber = phone_e164($countryCode, $properties['mobilephone']);
if ($mobileNumber !== null) {
$record['phoneNumbers'][] = [
'number' => $mobileNumber,
'nationalFormat' => phone_national($countryCode, $mobileNumber),
'type' => 'mobile',
];
}
}
$data[] = $record;
}
} catch (BadRequest $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [
'teamId' => $this->team->getUuid(),
'request' => $payload,
'reason' => $e->getMessage(),
]);
throw $e;
}
}
return $data;
},
);
}
/**
* @inheritdoc
*/
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$ownerId = null;
if ($crmAccountId === null) {
return $data;
}
if ($userId) {
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
$ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
$closedStages = $this->getClosedDealStages();
$payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(
$this->config,
$crmAccountId,
$closedStages,
);
$results = $this->client->getPaginatedData($payload, 'deals');
foreach ($results['results'] as $object) {
$properties = $object['properties'];
$amount = null;
if (empty($properties['amount']) === false) {
$currency = $properties['deal_currency_code'] ?? $this->config->default_currency;
// Values can contain commas and any junk so strip them.
$value = (float) preg_replace('/[^\d.]/', '', $properties['amount']);
$amount = formatCurrency($value, $currency);
}
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
if ($businessProcess === null) {
// Import it.
$stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
} else {
$stage = $businessProcess
->stages()
->where('crm_provider_id', $properties['dealstage'])
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
if ($stage === null) {
// Import it.
$stage = $this->importStages(null, $properties['dealstage']);
}
}
$recordType = null;
if ($businessProcess) {
$recordType = $businessProcess->recordTypes()->first();
}
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$record = [
'crmId' => $object['id'],
'name' => $properties['dealname'] ?? 'Unknown Deal',
'value' => $amount,
'won' => $isWon,
'closed' => $isWon || $isLost,
'stage' => [
'id' => $stage?->getUuid() ?? '',
'name' => $stage?->getName() ?? '',
],
];
if ($recordType) {
$record += [
'recordType' => [
'id' => $recordType->id_string,
'name' => $recordType->name,
],
];
}
if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
}
/**
* @inheritdoc
*/
public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array
{
$data = [];
switch ($objectType) {
case 'contact':
$hsObject = 'contact';
break;
case 'account':
$hsObject = 'company';
break;
default:
// This is a hack to prioritise and override a contact/company with a deal.
if ($opportunityId) {
$hsObject = 'deal';
$objectId = $opportunityId;
} else {
throw new InvalidArgumentException('Object type not supported.');
}
}
$engagementTypes = ['meetings', 'tasks'];
foreach ($engagementTypes as $engagementType) {
$payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);
$this->logger->info('[HubSpot] CRM Search requested', [
'request' => $payload,
]);
$engagements = $this->client->getPaginatedData($payload, $engagementType);
foreach ($engagements['results'] as $engagement) {
if ($engagementType == 'meetings') {
$title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';
} elseif ($engagementType == 'tasks') {
$title = $engagement['properties']['hs_task_subject'];
} else {
$title = 'Scheduled meeting';
}
$data[] = [
'crmId' => $engagement['id'],
'subject' => $title,
'due' => $engagement['properties']['hs_timestamp'],
'type' => $engagement['properties']['hs_activity_type'] ?? null,
];
}
}
usort($data, function ($item1, $item2) {
return $item2['due'] <=> $item1['due'];
});
return $data;
}
/**
* Try to find CRM Objects using email address
*
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchExactlyByEmail(string $email, ?int $userId = null): ?array
{
$contactProperties = [
'email',
'firstname',
'lastname',
'country',
'phone',
'mobilephone',
'jobtitle',
'hubspot_owner_id',
'associatedcompanyid',
'photo',
];
$contact = null;
$account = null;
try {
$hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);
if ($hsContact) {
$contact = $this->importContact($hsContact);
$account = $contact->account;
}
$data = $this->convertCrmData($contact, $account, $userId);
return ! empty(array_filter($data)) ? $data : null;
} catch (BadRequest $e) {
$this->logger->warning('[HubSpot] Search failed', [
'team_id' => $this->team->getId(),
'search_identifier' => $email,
'reason' => $e->getMessage(),
]);
}
return null;
}
public function getDomain(string $email): ?string
{
return $this->getDomainFromEmail($email);
}
/**
* Try to find CRM objects using domain name of the email address
*
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchByDomain(string $domain, ?int $userId = null): ?array
{
$companyName = $domain;
// Try to find a company matching their email domain.
$companyProperties = [
'country',
'phone',
'name',
'hs_avatar_filemanager_key',
'industry',
'hubspot_owner_id',
'domain',
];
try {
$hsAccounts = $this->client
->getInstance()
->companies()
->searchByDomain($companyName, $companyProperties);
} catch (Throwable $e) {
$this->logger->info('[HubSpot] Search failed', [
'error' => $e->getMessage(),
'domain' => $domain,
]);
return null;
}
$account = null;
// If there are multiple accounts, don't guess, we'll ask later.
if (\count($hsAccounts->data->results) === 1) {
// Persist this remote object.
$account = $this->syncAccount($hsAccounts->data->results[0]->companyId);
}
$data = $this->convertCrmData(null, $account, $userId);
return ! empty(array_filter($data)) ? $data : null;
}
/**
* @return array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array
{
$countryCode = null;
if ($contact && $contact->country_code) {
$countryCode = $contact->country_code;
} elseif ($account && $account->country_code) {
$countryCode = $account->country_code;
}
try {
$hsOpportunities = $this->findOpportunities(
$account ? $account->crm_provider_id : null,
$contact ? $contact->crm_provider_id : null,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
// If there are multiple opportunities, don't guess, we'll ask later.
$opportunity = null;
$stage = null;
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
}
protected function getCacheKey(string $object, ?int $userId = null): ?string
{
$key = $this->team->getId() . $object;
$keySuffix = $this->getOwnerKeySuffix($userId);
return $key . $keySuffix;
}
private function getOwnerKeySuffix(?int $userId = null): string
{
return $userId === null ? '' : (string) $userId;
}
/**
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
*}
*/
public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array
{
if (str_contains($phone, '**')) {
return null;
}
// trim all whitespaces if present so the lookup doesn't fail
$phone = str_replace(' ', '', $phone);
// Check if the user is internal.
if ($this->isPhoneNumberOfTeamMember($phone)) {
return null;
}
$response = $this->searchForPhoneNumber($phone);
if (empty($response)) {
return null;
}
// This would ideally importContact instead but the response type differs.
$contact = $this->findAndSyncContact($response['results'][0]['id']);
if (! $contact instanceof Contact) {
return null;
}
$account = $contact->account;
$countryCode = $contact->country_code ?? $account->country_code ?? null;
try {
$hsOpportunities = $this->findOpportunities(
$account?->crm_provider_id,
$contact->crm_provider_id,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
$opportunity = null;
$stage = null;
try {
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
} catch (Exception $e) {
$this->logger->debug('[HubSpot] Opportunity failed to sync.', [
'reason' => $e->getMessage(),
]);
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
}
private function isPhoneNumberOfTeamMember(string $phone): bool
{
$teamRepository = app(TeamRepository::class);
$user = $teamRepository->findTeamMemberByPhone($this->team, $phone);
if ($user instanceof User) {
return true;
}
return false;
}
private function findAndSyncContact(string $crmId): ?Contact
{
try {
return $this->syncContact($crmId);
} catch (Exception $exception) {
$this->logger->info('[HubSpot] Phone match failed', [
'reason' => $exception->getMessage(),
]);
return null;
}
}
private function hasResults(array $response): bool
{
return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;
}
private function searchForPhoneNumber(string $phone): array
{
// Normalizes the provided phone number for the API search.
$normalizedPhone = $this->normalizePhoneNumber($phone);
$payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);
$this->logger->info('[HubSpot] Phone match search triggered', [
'phone' => $phone,
'normalizedPhone' => $normalizedPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);
if (! $this->hasResults($response)) {
$nationalPhone = preg_replace('/\D/', '', phone_national(null, $phone));
$payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);
$this->logger->info('[HubSpot] Phone match national number search triggered', [
'phone' => $phone,
'nationalPhone' => $nationalPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($phone, $payload);
}
if (! $this->hasResults($response)) {
$payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);
$this->logger->info('[HubSpot] Phone match alternative search triggered', [
'phone' => $phone,
'normalizedPhone' => $normalizedPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($phone, $payload);
}
return $this->hasResults($response) ? $response : [];
}
private function handlePhoneSearchRequest(string $phone, array $payload): array
{
try {
return $this->client->search('contacts', $payload);
} catch (Exception $exception) {
$this->logger->info('[HubSpot] Phone match failed', [
'phone' => $phone,
'reason' => $exception->getMessage(),
]);
return [];
}
}
private function normalizePhoneNumber(string $phone): string
{
return ltrim(phone_e164(null, $phone), '+0');
}
/**
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchByName(string $name, ?int $userId = null): ?array
{
// Don't waste time searching for single character strings.
if (\strlen($name) <= 1) {
return null;
}
$cacheKey = $this->getCacheKey($name, $userId);
$result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {
$payload = $this->payloadBuilder->generateSearchContactsByNamePayload(
$name,
$this->getContactFields()
);
$hsContacts = $this->client->getPaginatedData($payload, 'contact');
if (empty($hsContacts['results'])) {
return false;
}
$contact = $this->importContact($hsContacts['results'][0]);
if ($contact === null) {
return false;
}
$account = $contact->account;
$countryCode = $contact->country_code ?? $account->country_code ?? null;
try {
$hsOpportunities = $this->findOpportunities(
$account ? $account->crm_provider_id : null,
$contact->crm_provider_id,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
$opportunity = null;
$stage = null;
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
});
return is_array($result) ? $result : null;
}
private function convertActivityAssociations(Activity $activity): array
{
return [
'contactIds' => $this->getParticipantsIds($activity),
'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],
'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],
'ownerIds' => [],
];
}
private function getParticipantsIds(Activity $activity): array
{
$attendees = [];
$participantRepository = app(ParticipantRepository::class);
$participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);
foreach ($participants as $participant) {
if ($participant->user_id || $participant->isCoach()) {
continue;
}
$contact = $participant->contact()->first();
if ($contact && $contact->crm_provider_id) {
$attendees[] = $contact->crm_provider_id;
} else {
if (! empty($participant->name)) {
$attendeeData = $this->fetchMissingAttendeeInfo($participant);
}
if (! empty($attendeeData['id'])) {
$attendees[] = $attendeeData['id'];
}
}
}
if ($activity->hasContact()) {
$attendees[] = $activity->contact->crm_provider_id;
}
return array_unique($attendees);
}
private function fetchMissingAttendeeInfo(Participant $participant): array
{
// Check if we need to look inside an account context.
$activity = $participant->getActivity();
$companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;
// First check the local data.
/** @var Contact[] $contacts */
$contacts = $this->team->contacts()
->with('account')
->where('name', $participant->name)
->whereNotNull('email')
->get();
foreach ($contacts as $contact) {
// If we have a company in scope, check the contact is associated to it.
if (
$companyId !== null
&& ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)
) {
continue;
}
return [
'id' => $contact->crm_provider_id,
'email' => $contact->email,
];
}
$payload = $this->generateNameSearchPayload($participant->name, 0, 20);
try {
$response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);
// TODO add some logic to choose the most suitable contact if multiple
foreach ($response['results'] as $object) {
$properties = $object['properties'];
if (empty($object['properties']) === false) {
// Check the company matches the contact.
// Todo: Move this check inside the API search.
if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {
continue;
}
return [
'id' => $object['id'],
'email' => $properties['email'],
];
}
}
} catch (Exception $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [
'teamId' => $this->team->id_string,
'request' => $payload,
'reason' => $e->getMessage(),
]);
}
return [];
}
/**
* Store transcripts as note engagement.
*
* @throws Exception
*/
public function createTranscriptNotes(Activity $activity): void
{
// For HS no need to check if Crm profile - Log Notes field is enabled
// We only check if store_transcript toggle is enabled on crm profile.
$engagement = [
'active' => true,
'ownerId' => $this->profile->crm_provider_id,
'timestamp' => $activity->created_at->tz($activity->user->timezone)->getTimestamp() * 1000,
'type' => 'NOTE',
];
// Generate activity transcription.
$transcriptionData = $this->generateTranscription($activity);
// Truncate Notes with max notes length because transcription text could be very long.
$transcripts = mb_strimwidth($transcriptionData, 0, static::ENGAGEMENT_BODY_MAX_LENGTH);
$metadata = [
'body' => $transcripts,
];
$associations = $this->convertActivityAssociations($activity);
try {
$hsEngagement = $this->client
->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
$this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);
$noteId = $hsEngagement->data->engagement->id;
// Store crm logged id in transcription.
$transcription = $activity->getTranscription();
$transcription->crm_activity_id = $noteId;
$transcription->save();
} catch (Exception $e) {
Sentry::captureException($e);
}
}
/*
* @inheritdoc
*/
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$payload = [
'properties' => $data,
];
try {
switch ($objectType) {
case FieldData::OBJECT_OPPORTUNITY:
$this->client->getNewInstance()->crm()->deals()->basicApi()->update($objectId, $payload);
break;
case FieldData::OBJECT_CONTACT:
$this->client->getNewInstance()->crm()->contacts()->basicApi()->update($objectId, $payload);
break;
case FieldData::OBJECT_ACCOUNT:
$this->client->getNewInstance()->crm()->companies()->basicApi()->update($objectId, $payload);
break;
case FieldData::OBJECT_TASK:
// Endpoint for Engagements not ready
$engagements = [
'type' => 'TASK',
];
$metadata = $data;
$this->client->getInstance()->engagements()->update($objectId, $engagements, $metadata);
$this->logCrmEngagementManipulation(
self::ACTION_UPDATE,
['crmId' => $objectId],
$metadata,
);
break;
default:
throw new UnexpectedValueException('Unsupported object type "' . $objectType . '"');
}
} catch (\HubSpot\Client\Crm\Deals\ApiException $apiException) {
$errorMessage = $apiException->getMessage();
if ($apiException->getResponseBody()) {
$responseBody = json_decode($apiException->getResponseBody(), true, 512, JSON_THROW_ON_ERROR);
$errorMessage = $responseBody['message'] ?? $apiException->getMessage();
}
$this->logger->error(
'[HubSpot] Update record failed',
[
'objectType' => $objectType,
'objectId' => $objectId,
'payload' => $payload,
'reason' => $errorMessage,
'team' => $this->team->getUuid(),
]
);
throw new CrmException($errorMessage);
}
}
/*
* @inheritdoc
*/
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
switch ($objectType) {
case FieldData::OBJECT_OPPORTUNITY:
return $this->client->getInstance()->deals()->getById($objectId)->toArray();
case FieldData::OBJECT_CONTACT:
return $this->client->getInstance()->contacts()->getById($objectId)->toArray();
case FieldData::OBJECT_ACCOUNT:
return $this->cli...
|
[{"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":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"48","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"33","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse Carbon\\Carbon;\nuse Exception;\nuse Generator;\nuse GuzzleHttp\\Exception\\RequestException;\nuse Illuminate\\Support\\Facades\\Cache;\nuse InvalidArgumentException;\nuse Jiminny\\Contracts\\Repositories\\TeamRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\HubspotInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SavePlaybackLinkToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\VerifyTaskExistsInterface;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\HttpNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Participant;\nuse Jiminny\\Models\\Playbook;\nuse Jiminny\\Models\\SocialAccount;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Repositories\\Crm\\FieldRepository;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\ParticipantRepository;\nuse Jiminny\\Services\\Avatar\\ProspectPhotoPathService;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\Hubspot\\Actions\\SyncArchivedProfilesAction;\nuse Jiminny\\Services\\Crm\\Hubspot\\Fields\\ValueNormalizer;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\OpportunitySyncTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncFieldsTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\WriteCrmTrait;\nuse Jiminny\\Services\\Crm\\MatchDomainByEmailInterface;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Services\\Crm\\ResolveCompanyNameByEmailTrait;\nuse Jiminny\\Utils\\PlaybackUrlBuilder;\nuse Sentry;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse Throwable;\nuse UnexpectedValueException;\n\n/**\n * @phpstan-type CrmFieldDefinition array{\n * name: string,\n * label: string,\n * description: string,\n * type: string,\n * fieldType: string,\n * hidden: bool,\n * showCurrencySymbol: bool,\n * options: array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }\n */\nclass Service extends BaseService implements\n HubspotInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n SendSummaryToCrmInterface,\n MatchDomainByEmailInterface,\n SavePlaybackLinkToCrmInterface,\n RemoteEntityManipulationInterface,\n FetchRelatedActivityInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n VerifyTaskExistsInterface\n{\n use ResolveCompanyNameByEmailTrait;\n use SyncCrmEntitiesTrait;\n use WriteCrmTrait;\n use SyncFieldsTrait;\n use OpportunitySyncTrait;\n\n private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;\n\n private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';\n private const int BATCH_UPDATE_LIMIT = 100;\n private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';\n private const int TEN_SECONDLY_ROLLING_LIMIT = 10;\n\n private const string TYPE_NOTE = 'NOTE';\n\n private const string TYPE_MEETING = 'MEETING';\n\n private const string TYPE_CALL = 'CALL';\n\n private const string API_URL = 'https://api.hubapi.com';\n\n // NB: v1 is legacy - v3 is the newest\n private const string ENDPOINT_PIPELINES = '/crm-pipelines/v1/pipelines/';\n private const string PIPELINE_OBJECT_TYPE_DEALS = 'deals';\n\n private const int TASK_VERIFICATION_CACHE_TTL = 86400; // 1 day\n\n /**\n * @var ClientInterface|Client\n */\n protected $client;\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected ProspectPhotoPathService $prospectPhotoPathService;\n\n private SyncFieldAction $syncFieldAction;\n private PayloadBuilder $payloadBuilder;\n private SyncRelatedActivityManager $syncRelatedActivityManager;\n private SyncArchivedProfilesAction $syncArchivedProfilesAction;\n private WebhookSyncBatchProcessor $batchProcessor;\n\n public function __construct(\n Client $client,\n SyncFieldAction $syncFieldAction,\n PayloadBuilder $payloadBuilder,\n ProspectPhotoPathService $prospectPhotoPathService,\n SyncArchivedProfilesAction $syncArchivedProfilesAction,\n WebhookSyncBatchProcessor $batchProcessor,\n ) {\n parent::__construct();\n\n $this->client = $client;\n $this->syncFieldAction = $syncFieldAction;\n $this->prospectPhotoPathService = $prospectPhotoPathService;\n $this->payloadBuilder = $payloadBuilder;\n $this->syncArchivedProfilesAction = $syncArchivedProfilesAction;\n $this->batchProcessor = $batchProcessor;\n $this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [\n 'client' => $this->client,\n ]);\n $this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [\n 'client' => $this->client,\n 'payloadBuilder' => $this->payloadBuilder,\n 'logger' => $this->logger,\n ]);\n $this->crmEntityRepository = app(CrmEntityRepository::class);\n $this->dealFieldsService = app(DealFieldsService::class);\n }\n\n public function getDisplayName(): string\n {\n return 'HubSpot';\n }\n\n protected function getOAuthAccount(User $user): ?SocialAccount\n {\n // In this case, the Account Owner is always the connection for any API operations.\n $owner = $user->team->owner;\n\n return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);\n }\n\n public function getClient(): Client\n {\n /** @var Client */\n return $this->client;\n }\n\n /**\n * Convert raw field data into a format compatible with CRM APIs.\n *\n * @param bool $internal Direction of the conversion.\n * True is pulling from CRM, false normalize before sending to CRM.\n */\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return ValueNormalizer::normalize(\n fieldType: $fieldType,\n fieldValue: $fieldValue,\n isInbound: $internal,\n );\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultFields(string $activityType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n $defaultFields = FieldDefinitions::defaultTaskFields();\n\n // This lazy creates these fields if not already setup.\n foreach ($defaultFields as $defaultField) {\n $fields[] = $this->config->fields()->firstOrCreate($defaultField);\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityField(string $activityType): Field\n {\n /** @var Field $activityField */\n $activityField = $this->config->fields()->where([\n 'crm_provider_id' => 'activityType',\n 'object_type' => $activityType,\n ])->first();\n\n return $activityField;\n }\n\n /**\n * @inheritdoc\n */\n public function getSupportedPlaybookTypes(): array\n {\n return [Playbook::ACTIVITY_TYPE_TASK];\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n // Outcome should always be provided calls/meetings.\n $fieldData = [\n [\n 'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',\n 'object_type' => Field::OBJECT_TASK,\n ],\n ];\n\n foreach ($fieldData as $data) {\n $field = $this->config->fields()->where($data)->first();\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n }\n\n return $fields;\n }\n\n public function getDealInsightsFields(): array\n {\n return FieldDefinitions::dealInsightsFields();\n }\n\n protected function getDefaultFollowupLayoutFields(string $activityType): array\n {\n $fields = [];\n $fieldRepo = app(FieldRepository::class);\n $fieldData = FieldDefinitions::followupFieldsFilter();\n\n foreach ($fieldData as $data) {\n $field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function syncField(Field $field): void\n {\n switch ($field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_CONTACT:\n $crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_OPPORTUNITY:\n $crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_TASK:\n $this->syncSingleTaskField($field);\n\n return;\n default:\n return;\n }\n\n $this->syncFieldAction->execute($field, $crmField->toArray());\n }\n\n /**\n * @param array<array{\n * id:string,\n * label:string,\n * value?:string\n * }> $options\n *\n * @throws CrmException\n *\n * @return FieldData[]\n *\n */\n public function importPicklistValues(\n Field $field,\n array $options = [['id' => '', 'label' => '', 'value' => '']],\n ): array {\n if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {\n // We already have the options, no need to fetch them again\n return $this->importOptions($field, $options);\n }\n\n $options = [];\n\n switch ($field->getObjectType()) {\n case Field::OBJECT_ACCOUNT:\n $options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_CONTACT:\n $options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n // Hubspot has different endpoint for stages\n $options = $this->getClient()->fetchOpportunityFieldOptions($field);\n\n break;\n\n case Field::OBJECT_TASK:\n if ($field->getCrmProviderId() === 'disposition') {\n $options = $this->getClient()->fetchDispositionFieldOptions();\n } elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {\n $options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);\n }\n\n break;\n\n default:\n $this->logger->warning('Invalid object type', [\n 'object_type' => $field->getObjectType(),\n 'field_id' => $field->getId(),\n ]);\n\n throw new CrmException('Invalid object type');\n }\n\n return $this->importOptions($field, $options);\n }\n\n /**\n * @inheritdoc\n */\n public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage\n {\n $missingStage = null;\n\n try {\n // Use the HubSpot API client instead of the SDK crmPipelines() method\n $endpoint = self::getDealsPipelinesEndpoint();\n $pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);\n $pipelines = $pipelinesResponse->data->results;\n } catch (RequestException|BadRequest $exception) {\n throw $exception;\n }\n\n foreach ($pipelines as $pipeline) {\n $stages = [];\n\n // We create a business process to contain the pipeline, and store all stages against it.\n $p = ResponseNormalize::normalizePipeline($pipeline);\n\n // Create/update business process for this pipeline\n $businessProcess = $this->config->businessProcesses()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'type' => BusinessProcess::TYPE_OPPORTUNITY,\n 'is_selectable' => $p['active'],\n ]);\n\n // A record type is really a clone of the business process, used to store which record uses which pipeline.\n // Create/update record type clone\n $this->config->recordTypes()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'is_selectable' => $p['active'],\n 'business_process_id' => $businessProcess->id ?? null,\n ]);\n\n // Stages - fetch all existing stages upfront to avoid N+1 queries\n $existingStages = $this->config->stages()\n ->withTrashed()\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->get()\n ->keyBy('crm_provider_id');\n\n foreach ($p['stages'] as $dealStage) {\n $s = ResponseNormalize::normalizeDealStage($dealStage);\n\n /** @var ?Stage $existingStage */\n $existingStage = $existingStages->get($s['id']);\n\n // Restore soft-deleted stages that are now active in HubSpot\n if ($existingStage?->trashed() && $s['active']) {\n $existingStage->restore();\n }\n\n // Upsert stage (updates soft-deleted records without restoring them)\n $stage = $this->config->stages()->withTrashed()->updateOrCreate([\n 'crm_provider_id' => $s['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($s['label'], 0, 50),\n 'label' => mb_strimwidth($s['label'], 0, 191),\n 'type' => Stage::TYPE_OPPORTUNITY,\n 'sequence' => $s['displayOrder'],\n 'is_selectable' => $s['active'],\n 'probability' => $s['probability'] * 100,\n ]);\n\n if ($missingStageName === $s['id']) {\n $missingStage = $stage;\n }\n\n $stages[] = $stage->id;\n }\n\n $businessProcess->stages()->sync($stages);\n }\n\n return $missingStage;\n }\n\n /**\n * @inheritdoc\n */\n public function syncOrganization(): void\n {\n try {\n $endpoint = 'https://api.hubapi.com/integrations/v1/me';\n $response = $this->client->getInstance()->getClient()->request('get', $endpoint);\n\n $accountData = $response->data;\n $this->config->update(['default_currency' => $accountData->currency]);\n } catch (BadRequest $e) {\n throw new CrmException('Could not sync the organization.', $e->getCode(), $e);\n }\n }\n\n /**\n * @inheritdoc\n *\n * @throws CrmException\n */\n public function syncProfiles(?User $userToSearch = null): ?Profile\n {\n $this->syncArchivedProfilesAction->execute($this->team, $this->client, $this->config);\n\n try {\n $owners = $this->client->getOwners();\n } catch (\\HubSpot\\Client\\Crm\\Owners\\ApiException $e) {\n $this->logger->error('[HubSpot] Could not sync the profiles.', [\n 'team_id' => $this->team->getId(),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new CrmException('Could not sync the profiles.', $e->getCode(), $e);\n }\n\n $profileRepository = app(ProfileRepository::class);\n $teamRepository = app(TeamRepository::class);\n\n foreach ($owners as $owner) {\n if ($owner->getArchived()) {\n // not supposed to fetch archived, but log anyway\n $this->logger->warning('[HubSpot] Found archived owner', [\n 'crm_provider_id' => $owner->getId(),\n 'email' => $owner->getEmail(),\n ]);\n\n continue;\n }\n\n $email = $owner->getEmail();\n if ($email === null) {\n continue;\n }\n\n $user = $teamRepository->findActiveTeamMemberByEmail($this->team, $email);\n\n if (! $user instanceof User) {\n continue;\n }\n\n $profile = $profileRepository->updateOrCreateProfile($user, [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $owner->getId(),\n ]);\n\n if ($userToSearch && $userToSearch->getId() === $user->getId()) {\n return $profile;\n }\n }\n\n return null;\n }\n\n private function generateNameSearchPayload(string $name, int $offset, int $limit): array\n {\n $payload = [\n 'query' => $name,\n 'sorts' => [\n [\n 'propertyName' => 'modifieddate',\n 'direction' => 'DESCENDING',\n ],\n ],\n 'properties' => [\n 'email',\n 'firstname',\n 'lastname',\n 'country',\n 'phone',\n 'mobilephone',\n 'jobtitle',\n 'hubspot_owner_id',\n 'associatedcompanyid',\n 'photo',\n 'industry',\n 'name',\n 'company',\n ],\n 'limit' => $limit,\n 'after' => $offset,\n ];\n\n $this->logger->debug('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n return $payload;\n }\n\n /**\n * @inheritdoc\n */\n public function find(string $name, array $scopes): array\n {\n $count = $this->limit ?? 20;\n $offset = $this->offset ?? 0;\n\n /** @var array<int, array<string, mixed>> */\n return Cache::remember(\n key: $this->team->getId() . $name . $count . $offset,\n ttl: 300,\n callback: function () use ($name, $offset, $count): array {\n $data = [];\n\n // Use the new V3 API to find contacts based on additional fields.\n foreach (['companies', 'contacts'] as $objectType) {\n $payload = $this->generateNameSearchPayload($name, $offset, $count);\n $type = $objectType === 'companies' ? 'account' : 'contact';\n\n try {\n $response = $this->client->search($objectType, $payload);\n\n // Build mapped list.\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n\n $objectName = $this->buildContactName($properties);\n\n $record = [\n 'crmId' => $object['id'],\n // Pass crmUrl to the FE, needed for success message in the extension when you log activity.\n 'crmUrl' => $this->generateProviderUrl($object['id'], $type),\n 'name' => $objectName,\n 'prospectType' => $type,\n 'phoneNumbers' => [],\n ];\n\n if ($type === 'account') {\n $record['industry'] = $properties['industry'] ?? null;\n } else {\n $record['title'] = $properties['jobtitle'] ?? null;\n $record['organization'] = $properties['company'] ?? null;\n }\n\n $countryCode = $this->buildContactCountry($properties);\n $parsedNumber = $this->buildContactPhone($countryCode, $properties);\n\n // Add phone number to record.\n if (! empty($parsedNumber['phone'])) {\n $record['phoneNumbers'][] = [\n 'number' => $parsedNumber['phone'],\n 'nationalFormat' => phone_national($countryCode, $parsedNumber['phone']),\n 'type' => 'phone',\n ];\n }\n\n // Add mobile phone number to record.\n if (! empty($properties['mobilephone'])) {\n $mobileNumber = phone_e164($countryCode, $properties['mobilephone']);\n if ($mobileNumber !== null) {\n $record['phoneNumbers'][] = [\n 'number' => $mobileNumber,\n 'nationalFormat' => phone_national($countryCode, $mobileNumber),\n 'type' => 'mobile',\n ];\n }\n }\n\n $data[] = $record;\n }\n } catch (BadRequest $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->getUuid(),\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n }\n\n return $data;\n },\n );\n }\n\n\n /**\n * @inheritdoc\n */\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n $ownerId = null;\n\n if ($crmAccountId === null) {\n return $data;\n }\n\n if ($userId) {\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n $ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n $closedStages = $this->getClosedDealStages();\n $payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(\n $this->config,\n $crmAccountId,\n $closedStages,\n );\n\n $results = $this->client->getPaginatedData($payload, 'deals');\n\n foreach ($results['results'] as $object) {\n $properties = $object['properties'];\n\n $amount = null;\n if (empty($properties['amount']) === false) {\n $currency = $properties['deal_currency_code'] ?? $this->config->default_currency;\n\n // Values can contain commas and any junk so strip them.\n $value = (float) preg_replace('/[^\\d.]/', '', $properties['amount']);\n $amount = formatCurrency($value, $currency);\n }\n\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n\n if ($businessProcess === null) {\n // Import it.\n $stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n } else {\n $stage = $businessProcess\n ->stages()\n ->where('crm_provider_id', $properties['dealstage'])\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n if ($stage === null) {\n // Import it.\n $stage = $this->importStages(null, $properties['dealstage']);\n }\n }\n\n $recordType = null;\n if ($businessProcess) {\n $recordType = $businessProcess->recordTypes()->first();\n }\n\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $record = [\n 'crmId' => $object['id'],\n 'name' => $properties['dealname'] ?? 'Unknown Deal',\n 'value' => $amount,\n 'won' => $isWon,\n 'closed' => $isWon || $isLost,\n 'stage' => [\n 'id' => $stage?->getUuid() ?? '',\n 'name' => $stage?->getName() ?? '',\n ],\n ];\n\n if ($recordType) {\n $record += [\n 'recordType' => [\n 'id' => $recordType->id_string,\n 'name' => $recordType->name,\n ],\n ];\n }\n\n if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n }\n\n /**\n * @inheritdoc\n */\n public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array\n {\n $data = [];\n switch ($objectType) {\n case 'contact':\n $hsObject = 'contact';\n\n break;\n case 'account':\n $hsObject = 'company';\n\n break;\n default:\n // This is a hack to prioritise and override a contact/company with a deal.\n if ($opportunityId) {\n $hsObject = 'deal';\n $objectId = $opportunityId;\n } else {\n throw new InvalidArgumentException('Object type not supported.');\n }\n }\n\n $engagementTypes = ['meetings', 'tasks'];\n\n foreach ($engagementTypes as $engagementType) {\n $payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);\n\n $this->logger->info('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n $engagements = $this->client->getPaginatedData($payload, $engagementType);\n\n foreach ($engagements['results'] as $engagement) {\n if ($engagementType == 'meetings') {\n $title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';\n } elseif ($engagementType == 'tasks') {\n $title = $engagement['properties']['hs_task_subject'];\n } else {\n $title = 'Scheduled meeting';\n }\n\n $data[] = [\n 'crmId' => $engagement['id'],\n 'subject' => $title,\n 'due' => $engagement['properties']['hs_timestamp'],\n 'type' => $engagement['properties']['hs_activity_type'] ?? null,\n ];\n }\n }\n\n usort($data, function ($item1, $item2) {\n return $item2['due'] <=> $item1['due'];\n });\n\n return $data;\n }\n\n /**\n * Try to find CRM Objects using email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchExactlyByEmail(string $email, ?int $userId = null): ?array\n {\n $contactProperties = [\n 'email',\n 'firstname',\n 'lastname',\n 'country',\n 'phone',\n 'mobilephone',\n 'jobtitle',\n 'hubspot_owner_id',\n 'associatedcompanyid',\n 'photo',\n ];\n $contact = null;\n $account = null;\n\n try {\n $hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);\n\n if ($hsContact) {\n $contact = $this->importContact($hsContact);\n $account = $contact->account;\n }\n\n $data = $this->convertCrmData($contact, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n } catch (BadRequest $e) {\n $this->logger->warning('[HubSpot] Search failed', [\n 'team_id' => $this->team->getId(),\n 'search_identifier' => $email,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return null;\n }\n\n public function getDomain(string $email): ?string\n {\n return $this->getDomainFromEmail($email);\n }\n\n /**\n * Try to find CRM objects using domain name of the email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByDomain(string $domain, ?int $userId = null): ?array\n {\n $companyName = $domain;\n\n // Try to find a company matching their email domain.\n $companyProperties = [\n 'country',\n 'phone',\n 'name',\n 'hs_avatar_filemanager_key',\n 'industry',\n 'hubspot_owner_id',\n 'domain',\n ];\n\n try {\n $hsAccounts = $this->client\n ->getInstance()\n ->companies()\n ->searchByDomain($companyName, $companyProperties);\n } catch (Throwable $e) {\n $this->logger->info('[HubSpot] Search failed', [\n 'error' => $e->getMessage(),\n 'domain' => $domain,\n ]);\n\n return null;\n }\n\n $account = null;\n // If there are multiple accounts, don't guess, we'll ask later.\n if (\\count($hsAccounts->data->results) === 1) {\n // Persist this remote object.\n $account = $this->syncAccount($hsAccounts->data->results[0]->companyId);\n }\n\n $data = $this->convertCrmData(null, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n }\n\n /**\n * @return array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array\n {\n $countryCode = null;\n if ($contact && $contact->country_code) {\n $countryCode = $contact->country_code;\n } elseif ($account && $account->country_code) {\n $countryCode = $account->country_code;\n }\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact ? $contact->crm_provider_id : null,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n // If there are multiple opportunities, don't guess, we'll ask later.\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n protected function getCacheKey(string $object, ?int $userId = null): ?string\n {\n $key = $this->team->getId() . $object;\n $keySuffix = $this->getOwnerKeySuffix($userId);\n\n return $key . $keySuffix;\n }\n\n private function getOwnerKeySuffix(?int $userId = null): string\n {\n return $userId === null ? '' : (string) $userId;\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n *}\n */\n public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array\n {\n if (str_contains($phone, '**')) {\n return null;\n }\n\n // trim all whitespaces if present so the lookup doesn't fail\n $phone = str_replace(' ', '', $phone);\n\n // Check if the user is internal.\n if ($this->isPhoneNumberOfTeamMember($phone)) {\n return null;\n }\n\n $response = $this->searchForPhoneNumber($phone);\n if (empty($response)) {\n return null;\n }\n\n // This would ideally importContact instead but the response type differs.\n $contact = $this->findAndSyncContact($response['results'][0]['id']);\n if (! $contact instanceof Contact) {\n return null;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account?->crm_provider_id,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n\n try {\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n } catch (Exception $e) {\n $this->logger->debug('[HubSpot] Opportunity failed to sync.', [\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n private function isPhoneNumberOfTeamMember(string $phone): bool\n {\n $teamRepository = app(TeamRepository::class);\n $user = $teamRepository->findTeamMemberByPhone($this->team, $phone);\n\n if ($user instanceof User) {\n return true;\n }\n\n return false;\n }\n\n private function findAndSyncContact(string $crmId): ?Contact\n {\n try {\n return $this->syncContact($crmId);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'reason' => $exception->getMessage(),\n ]);\n\n return null;\n }\n }\n\n private function hasResults(array $response): bool\n {\n return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;\n }\n\n private function searchForPhoneNumber(string $phone): array\n {\n // Normalizes the provided phone number for the API search.\n $normalizedPhone = $this->normalizePhoneNumber($phone);\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);\n\n $this->logger->info('[HubSpot] Phone match search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);\n\n if (! $this->hasResults($response)) {\n $nationalPhone = preg_replace('/\\D/', '', phone_national(null, $phone));\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);\n\n $this->logger->info('[HubSpot] Phone match national number search triggered', [\n 'phone' => $phone,\n 'nationalPhone' => $nationalPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n if (! $this->hasResults($response)) {\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);\n\n $this->logger->info('[HubSpot] Phone match alternative search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n return $this->hasResults($response) ? $response : [];\n }\n\n private function handlePhoneSearchRequest(string $phone, array $payload): array\n {\n try {\n return $this->client->search('contacts', $payload);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'phone' => $phone,\n 'reason' => $exception->getMessage(),\n ]);\n\n return [];\n }\n }\n\n private function normalizePhoneNumber(string $phone): string\n {\n return ltrim(phone_e164(null, $phone), '+0');\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByName(string $name, ?int $userId = null): ?array\n {\n // Don't waste time searching for single character strings.\n if (\\strlen($name) <= 1) {\n return null;\n }\n\n $cacheKey = $this->getCacheKey($name, $userId);\n\n $result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {\n $payload = $this->payloadBuilder->generateSearchContactsByNamePayload(\n $name,\n $this->getContactFields()\n );\n\n $hsContacts = $this->client->getPaginatedData($payload, 'contact');\n if (empty($hsContacts['results'])) {\n return false;\n }\n\n $contact = $this->importContact($hsContacts['results'][0]);\n if ($contact === null) {\n return false;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n });\n\n return is_array($result) ? $result : null;\n }\n\n\n private function convertActivityAssociations(Activity $activity): array\n {\n return [\n 'contactIds' => $this->getParticipantsIds($activity),\n 'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],\n 'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],\n 'ownerIds' => [],\n ];\n }\n\n private function getParticipantsIds(Activity $activity): array\n {\n $attendees = [];\n\n $participantRepository = app(ParticipantRepository::class);\n $participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);\n foreach ($participants as $participant) {\n if ($participant->user_id || $participant->isCoach()) {\n continue;\n }\n\n $contact = $participant->contact()->first();\n if ($contact && $contact->crm_provider_id) {\n $attendees[] = $contact->crm_provider_id;\n } else {\n if (! empty($participant->name)) {\n $attendeeData = $this->fetchMissingAttendeeInfo($participant);\n }\n if (! empty($attendeeData['id'])) {\n $attendees[] = $attendeeData['id'];\n }\n }\n }\n\n if ($activity->hasContact()) {\n $attendees[] = $activity->contact->crm_provider_id;\n }\n\n return array_unique($attendees);\n }\n\n private function fetchMissingAttendeeInfo(Participant $participant): array\n {\n // Check if we need to look inside an account context.\n $activity = $participant->getActivity();\n $companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;\n\n // First check the local data.\n /** @var Contact[] $contacts */\n $contacts = $this->team->contacts()\n ->with('account')\n ->where('name', $participant->name)\n ->whereNotNull('email')\n ->get();\n\n foreach ($contacts as $contact) {\n // If we have a company in scope, check the contact is associated to it.\n if (\n $companyId !== null\n && ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)\n ) {\n continue;\n }\n\n return [\n 'id' => $contact->crm_provider_id,\n 'email' => $contact->email,\n ];\n }\n\n $payload = $this->generateNameSearchPayload($participant->name, 0, 20);\n\n try {\n $response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);\n\n // TODO add some logic to choose the most suitable contact if multiple\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n if (empty($object['properties']) === false) {\n // Check the company matches the contact.\n // Todo: Move this check inside the API search.\n if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {\n continue;\n }\n\n return [\n 'id' => $object['id'],\n 'email' => $properties['email'],\n ];\n }\n }\n } catch (Exception $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->id_string,\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [];\n }\n\n /**\n * Store transcripts as note engagement.\n *\n * @throws Exception\n */\n public function createTranscriptNotes(Activity $activity): void\n {\n // For HS no need to check if Crm profile - Log Notes field is enabled\n // We only check if store_transcript toggle is enabled on crm profile.\n $engagement = [\n 'active' => true,\n 'ownerId' => $this->profile->crm_provider_id,\n 'timestamp' => $activity->created_at->tz($activity->user->timezone)->getTimestamp() * 1000,\n 'type' => 'NOTE',\n ];\n\n // Generate activity transcription.\n $transcriptionData = $this->generateTranscription($activity);\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $transcripts = mb_strimwidth($transcriptionData, 0, static::ENGAGEMENT_BODY_MAX_LENGTH);\n\n $metadata = [\n 'body' => $transcripts,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsEngagement = $this->client\n ->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $noteId = $hsEngagement->data->engagement->id;\n\n // Store crm logged id in transcription.\n $transcription = $activity->getTranscription();\n $transcription->crm_activity_id = $noteId;\n $transcription->save();\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $payload = [\n 'properties' => $data,\n ];\n\n try {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n $this->client->getNewInstance()->crm()->deals()->basicApi()->update($objectId, $payload);\n\n break;\n case FieldData::OBJECT_CONTACT:\n $this->client->getNewInstance()->crm()->contacts()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_ACCOUNT:\n $this->client->getNewInstance()->crm()->companies()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_TASK:\n // Endpoint for Engagements not ready\n $engagements = [\n 'type' => 'TASK',\n ];\n $metadata = $data;\n $this->client->getInstance()->engagements()->update($objectId, $engagements, $metadata);\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $objectId],\n $metadata,\n );\n\n break;\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $apiException) {\n $errorMessage = $apiException->getMessage();\n if ($apiException->getResponseBody()) {\n $responseBody = json_decode($apiException->getResponseBody(), true, 512, JSON_THROW_ON_ERROR);\n $errorMessage = $responseBody['message'] ?? $apiException->getMessage();\n }\n\n $this->logger->error(\n '[HubSpot] Update record failed',\n [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'payload' => $payload,\n 'reason' => $errorMessage,\n 'team' => $this->team->getUuid(),\n ]\n );\n\n throw new CrmException($errorMessage);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n return $this->client->getInstance()->deals()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_CONTACT:\n return $this->client->getInstance()->contacts()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_ACCOUNT:\n return $this->client->getInstance()->companies()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_TASK:\n return $this->client->getInstance()->engagements()->get($objectId)->toArray();\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n }\n\n /**\n * @throws BadRequest\n * @throws CrmException\n */\n public function updateStage($crmObject, Stage $stage): void\n {\n $payload = [\n 'properties' => [\n [\n 'name' => 'dealstage',\n 'value' => $stage->crm_provider_id,\n ],\n ],\n ];\n\n try {\n $this->client->getInstance()->deals()->update($crmObject->crm_provider_id, $payload);\n } catch (BadRequest $badRequest) {\n if ($badRequest->getCode() === 403) {\n throw new CrmException(\n \"Sorry, you don't have permission to update this stage.\",\n $badRequest->getCode(),\n $badRequest,\n );\n }\n\n $this->logger->warning('[HubSpot] Stage update failed', [\n 'dealId' => $crmObject->crm_provider_id,\n 'payload' => $payload,\n 'message' => $badRequest->getMessage(),\n ]);\n\n throw $badRequest;\n }\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n $url = null;\n $baseUrl = 'https://app.hubspot.com/contacts/' . $this->config->crm_provider_id . '/';\n\n switch ($objectType) {\n case 'account':\n $url = $baseUrl . 'company/' . $providerId;\n\n break;\n\n case 'contact':\n $url = $baseUrl . 'contact/' . $providerId;\n\n break;\n\n case 'opportunity':\n $url = $baseUrl . 'deal/' . $providerId;\n\n break;\n\n case 'task':\n case 'activity':\n return null;\n\n // This should not be deep-linked as per JMNY-3934.\n //$url = $baseUrl.'tasks/list/view/all/?taskId='.$providerId;\n break;\n }\n\n return $url;\n }\n\n public function searchCalls(Carbon $from, Carbon $to, string $activityProvider): array\n {\n $this->logger->info('[HubSpot] Search calls', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $calls = [];\n $page = 1;\n\n do {\n try {\n $payload = $this->payloadBuilder->generateGetCallsPayload($from, $to, $activityProvider, $page);\n $response = $this->client->search('calls', $payload);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n $calls = array_merge($calls, $responseResults);\n $page++;\n } while (! empty($responseResults));\n\n return $calls;\n }\n\n public function searchCallsForPeriodByPage(Carbon $from, Carbon $to, int $page, bool $retry = true)\n {\n try {\n $payload = $this->payloadBuilder->generateSearchCallsByPeriodPayload($from, $to, $page);\n\n return $this->client->search('calls', $payload);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls for period failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallsForPeriodByPage($from, $to, $page, false);\n }\n\n return null;\n }\n }\n\n public function searchCallsForPeriod(Carbon $from, Carbon $to): Generator\n {\n $this->logger->info('[HubSpot] Search calls for period', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $page = 1;\n\n do {\n $response = $this->searchCallsForPeriodByPage($from, $to, $page);\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n\n $associationContacts = $this->getAssociationDataForCollection($responseResults, 'calls', 'contacts');\n $associationCompanies = $this->getAssociationDataForCollection($responseResults, 'calls', 'companies');\n $associationDeals = $this->getAssociationDataForCollection($responseResults, 'calls', 'deals');\n\n foreach ($responseResults as $call) {\n $call['associations'] = [\n 'contacts' => $this->importAssociationData($call, $associationContacts),\n 'companies' => $this->importAssociationData($call, $associationCompanies),\n 'deals' => $this->importAssociationData($call, $associationDeals),\n ];\n\n yield $call;\n }\n $page++;\n } while (! empty($responseResults));\n }\n\n public function getCall(string $callId): array\n {\n $this->logger->info('[HubSpot] Get call', [\n 'call_id' => $callId,\n ]);\n\n $searchAttributes = $this->payloadBuilder->getSearchCallAttributes();\n $endpoint = sprintf(\n 'https://api.hubapi.com/crm/v3/objects/calls/%s',\n $callId,\n );\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'GET',\n $endpoint,\n [],\n sprintf(\n 'properties=%s&associations=contacts,companies,deals',\n implode(',', $searchAttributes),\n ),\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Get call failed', [\n 'call_id' => $callId,\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n return empty($response) ? [] : $response->toArray();\n }\n\n public function bulkAddPlaybackURLToDescription(array $crmUpdateData): array\n {\n $crmUpdateBatches = array_chunk($crmUpdateData, self::BATCH_UPDATE_LIMIT);\n\n $updatedCrmIds = [];\n\n foreach ($crmUpdateBatches as $crmBatch) {\n $payload = $this->payloadBuilder->generatePlaybackAddUrlBatchPayload($crmBatch);\n $updateSuccess = $this->bulkAddPlaybackURLToDescriptionRequest($payload);\n if ($updateSuccess) {\n $updatedCrmIds = array_merge($updatedCrmIds, array_column($crmBatch, 'crm_id'));\n }\n }\n\n return $updatedCrmIds;\n }\n\n private function bulkAddPlaybackURLToDescriptionRequest(array $payload, bool $retry = true): bool\n {\n try {\n $this->client->getNewInstance()->crm()->objects()->batchApi()->update('calls', $payload);\n\n return true;\n } catch (\\HubSpot\\Client\\Crm\\Objects\\ApiException $e) {\n $response = json_decode($e->getResponseBody(), true);\n $retryAfter =\n isset($response['policyName'])\n && $response['policyName'] == self::TEN_SECONDLY_ROLLING_POLICY\n ? self::TEN_SECONDLY_ROLLING_LIMIT\n : 1;\n } catch (Exception $e) {\n $retryAfter = 1;\n }\n\n $this->logger->warning('[HubSpot] Bulk add playback url to CRM failed', [\n 'reason' => $e->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep($retryAfter);\n\n return $this->bulkAddPlaybackURLToDescriptionRequest($payload, false);\n }\n\n return false;\n }\n\n /**\n * Sometimes we have secondly rate limit error, then retry request after 1 second\n */\n public function searchCallByRecordingURLToken(string $playbackURLToken, bool $retry = true): array\n {\n $payload = $this->payloadBuilder->generateSearchCallByTokenPayload($playbackURLToken);\n\n $this->logger->info('[HubSpot] CRM Search by playback URL token requested', [\n 'request' => $payload,\n ]);\n\n try {\n $response = $this->client->search('calls', $payload);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search by playback URL token failed', [\n 'playbackURLToken' => $playbackURLToken,\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallByRecordingURLToken($playbackURLToken, false);\n }\n\n return [];\n }\n\n return empty($response['results']) ? [] : $response['results'][0];\n }\n\n /**\n * Generate transcription for the activity.\n */\n private function generateTranscription(Activity $activity): string\n {\n if (! $this->config->store_transcript) {\n // If sending transcription to activity toggle is disabled\n return '';\n }\n\n $transcriptionSegments = $this->transcriptionService->findTranscriptionByActivity($activity);\n\n if ($transcriptionSegments->isEmpty()) {\n return '';\n }\n\n $transcription = sprintf(\n '<p><strong>Transcript for %s</strong></p><p></p>',\n $activity->title ?? $activity->activity_title,\n );\n\n $roomOwnerParticipant = $activity->findParticipantRoomOwner();\n $roomOwnerParticipantId = $roomOwnerParticipant !== null\n ? $roomOwnerParticipant->getId()\n : null;\n\n\n $transcription .= $transcriptionSegments\n ->map(static function (array $transcriptionSegment) use ($roomOwnerParticipantId): string {\n $isOrganiser = $roomOwnerParticipantId === $transcriptionSegment['participantId']\n && $roomOwnerParticipantId !== null;\n $transcriptColor = $isOrganiser ? '#000000' : '#f0415a';\n\n return sprintf(\n '<span style=\"color: %s;\">%s | </span>%s',\n $transcriptColor,\n $transcriptionSegment['formattedStartsAt'],\n $transcriptionSegment['transcript'],\n );\n })\n ->implode('<br />');\n\n return $transcription;\n }\n\n /**\n * @param array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }> $options\n *\n * @return FieldData[]\n */\n private function importOptions(Field $field, array $options): array\n {\n $fieldValues = [];\n $values = [];\n $sequence = 0;\n\n foreach ($options as $option) {\n $values[] = [\n 'value' => $option['value'] ?? $option['id'],\n 'label' => substr($option['label'], 0, 255),\n 'sequence' => $sequence++,\n ];\n }\n\n $fieldsToPurge = $field->values()->get()->pluck('value')->toArray();\n\n foreach ($values as $value) {\n $value['value'] = substr($value['value'], 0, 255);\n $fieldValues[] = $field->values()->updateOrCreate([\n 'value' => $value['value'],\n ], $value);\n\n // Remove this value from the ones we are going to purge.\n if (($key = array_search($value['value'], $fieldsToPurge, false)) !== false) {\n unset($fieldsToPurge[$key]);\n }\n }\n\n // Delete the old values that are no longer used.\n $field->values()->whereIn('value', $fieldsToPurge)->delete();\n\n return $fieldValues;\n }\n\n public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null || $objectId === null) {\n return null;\n }\n\n /** @var User $user */\n $user = $activity->getUser();\n\n $profile = $this->assignCrmOwner($user, $activity);\n if (! $profile instanceof Profile) {\n return null;\n }\n\n $timestamp = Carbon::now($user->getTimezone())->getTimestamp() * 1000;\n $engagement = [\n 'active' => true,\n 'ownerId' => $profile->getAttribute('crm_provider_id'),\n 'timestamp' => $timestamp,\n 'type' => 'NOTE',\n ];\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $body = mb_strimwidth($body, 0, self::ENGAGEMENT_BODY_MAX_LENGTH);\n $metadata = [\n 'body' => $body,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsActivityId = $this->client->createNote(\n body: $body,\n ownerId: $profile->getCrmProviderId(),\n timestamp: $timestamp,\n objectId: $objectId,\n noteObject: $noteObject,\n );\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $this->logger->info('[HubSpot] Saving Transcription Summary as Note', [\n 'activity' => $activity->getUuid(),\n 'crmActivity' => $hsActivityId,\n ]);\n\n return $hsActivityId;\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function attachSummaryToActivity(ActivityContract $activity, string $summaryTitle, string $summaryContents): bool\n {\n $this->logger->info('[HubSpot] Attaching summary to activity', [\n 'activity' => $activity->getUuid(),\n 'summary_content' => $summaryContents,\n ]);\n\n if (! $activity instanceof Activity) {\n throw new InvalidArgumentException('Expected instance of Activity');\n }\n\n $summary = '<p><strong>' . $summaryTitle . '</strong></p>';\n $summary .= '<p>' . $summaryContents . '</p>';\n $metadata = $this->buildMetadataForSummaryUpdate($activity, $summary);\n\n try {\n $type = $this->matchActivityEngagementType($activity);\n $engagement = ['type' => $type];\n\n $this->client->updateEngagement($activity->getCrmProviderId(), $engagement, $metadata);\n } catch (Exception $e) {\n $this->logger->warning('[HubSpot] Update summary failed', [\n 'activity' => $activity->getUuid(),\n 'reason' => $e->getMessage(),\n ]);\n\n return false;\n }\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $activity->getCrmProviderId()],\n $metadata,\n );\n\n return true;\n }\n\n private function buildMetadataForSummaryUpdate(Activity $activity, string $summary): array\n {\n $descriptionField = $activity->getType() === Activity::TYPE_CONFERENCE ? 'internalMeetingNotes' : 'body';\n $engagement = $this->client->getEngagementData($activity->getCrmProviderId());\n // Meeting without internalMeetingNotes might mean it just does not have any notes;\n $description = $engagement['metadata'][$descriptionField] ?? null;\n\n if (empty($description)) {\n $data = $summary;\n } else {\n // avoid playbook url link to Jiminny being sent twice in the activity description\n $targetUrl = PlaybackUrlBuilder::build($activity);\n\n if (str_contains($description, $targetUrl)) {\n $jiminnyUrl = '<p><a href=\"' . $targetUrl . '\" title=\"Play at Jiminny\">Play at Jiminny</a></p>';\n $summary = str_replace($jiminnyUrl, '', $summary);\n\n $this->logger->info('[HubSpot] Summary modified', [\n 'activity' => $activity->getUuid(),\n 'target_url' => $jiminnyUrl,\n 'modified_summary_content' => $summary,\n ]);\n }\n\n $data = $description . '<p></p>' . $summary;\n }\n\n return [\n $descriptionField => $data,\n ];\n }\n\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n return $this->syncRelatedActivityManager->fetchAndAssociateRelatedActivity($activity);\n }\n\n public function fetchRelatedActivity(Activity $activity): array\n {\n return [];\n }\n\n public function getDealsInBulk(array $dealIds): array\n {\n $payload = $this->payloadBuilder->getDealsInBulkPayload($dealIds);\n\n return $this->client->getPaginatedData($payload, 'deals');\n }\n\n /**\n * Extract deal IDs from HubSpot search response.\n *\n * @param array $hubspotResponse The raw HubSpot search API response.\n * @param bool $includeArchived Whether to include archived deals (default: false).\n *\n * @return string[] Array of deal IDs as strings.\n */\n public function extractDealIds(array $hubspotResponse, bool $includeArchived = false): array\n {\n if (empty($hubspotResponse['results'])) {\n return [];\n }\n\n return array_values(\n array_map(\n fn ($deal) => $deal['id'],\n array_filter(\n $hubspotResponse['results'],\n fn ($deal) => $includeArchived || empty($deal['archived'])\n )\n )\n );\n }\n\n public function matchActivityEngagementType(Activity $activity): string\n {\n return match ($activity->getType()) {\n Activity::TYPE_CONFERENCE => self::TYPE_MEETING,\n Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND => self::TYPE_CALL,\n default => self::TYPE_NOTE,\n };\n }\n\n private function assignCrmOwner(User $user, ActivityContract $activity): ?Profile\n {\n $profile = $user->getProfile();\n if ($profile instanceof Profile) {\n return $profile;\n }\n\n $this->logger->info('[HubSpot] Unable to save summary. No profile', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n private static function getDealsPipelinesEndpoint(): string\n {\n return self::API_URL . self::ENDPOINT_PIPELINES . self::PIPELINE_OBJECT_TYPE_DEALS;\n }\n\n public function verifyTaskExists(Activity $activity): bool\n {\n $crmProviderId = $activity->getCrmProviderId();\n $cacheKey = \"crm_task_exists:{$this->config->getId()}:$crmProviderId\";\n\n return Cache::remember($cacheKey, self::TASK_VERIFICATION_CACHE_TTL, function () use ($crmProviderId) {\n try {\n $engagement = $this->client->getEngagementData($crmProviderId);\n\n return ! empty($engagement);\n } catch (HttpNotFoundException|BadRequest) {\n // Engagement not found in CRM - this is expected and permanent\n $this->logger->info('[Hubspot] Engagement not found during verification', [\n 'engagement_id' => $crmProviderId,\n 'config_id' => $this->config->getId(),\n ]);\n\n return false;\n }\n // Let other exceptions (network errors, rate limits, etc.) bubble up for retry\n });\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse Carbon\\Carbon;\nuse Exception;\nuse Generator;\nuse GuzzleHttp\\Exception\\RequestException;\nuse Illuminate\\Support\\Facades\\Cache;\nuse InvalidArgumentException;\nuse Jiminny\\Contracts\\Repositories\\TeamRepository;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\HubspotInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SavePlaybackLinkToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\VerifyTaskExistsInterface;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\HttpNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Models\\Crm\\FieldData;\nuse Jiminny\\Models\\Crm\\Layout;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Participant;\nuse Jiminny\\Models\\Playbook;\nuse Jiminny\\Models\\SocialAccount;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Repositories\\Crm\\FieldRepository;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\ParticipantRepository;\nuse Jiminny\\Services\\Avatar\\ProspectPhotoPathService;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\Hubspot\\Actions\\SyncArchivedProfilesAction;\nuse Jiminny\\Services\\Crm\\Hubspot\\Fields\\ValueNormalizer;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\OpportunitySyncTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\SyncFieldsTrait;\nuse Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits\\WriteCrmTrait;\nuse Jiminny\\Services\\Crm\\MatchDomainByEmailInterface;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Services\\Crm\\ResolveCompanyNameByEmailTrait;\nuse Jiminny\\Utils\\PlaybackUrlBuilder;\nuse Sentry;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse Throwable;\nuse UnexpectedValueException;\n\n/**\n * @phpstan-type CrmFieldDefinition array{\n * name: string,\n * label: string,\n * description: string,\n * type: string,\n * fieldType: string,\n * hidden: bool,\n * showCurrencySymbol: bool,\n * options: array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }\n */\nclass Service extends BaseService implements\n HubspotInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n SendSummaryToCrmInterface,\n MatchDomainByEmailInterface,\n SavePlaybackLinkToCrmInterface,\n RemoteEntityManipulationInterface,\n FetchRelatedActivityInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n VerifyTaskExistsInterface\n{\n use ResolveCompanyNameByEmailTrait;\n use SyncCrmEntitiesTrait;\n use WriteCrmTrait;\n use SyncFieldsTrait;\n use OpportunitySyncTrait;\n\n private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;\n\n private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';\n private const int BATCH_UPDATE_LIMIT = 100;\n private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';\n private const int TEN_SECONDLY_ROLLING_LIMIT = 10;\n\n private const string TYPE_NOTE = 'NOTE';\n\n private const string TYPE_MEETING = 'MEETING';\n\n private const string TYPE_CALL = 'CALL';\n\n private const string API_URL = 'https://api.hubapi.com';\n\n // NB: v1 is legacy - v3 is the newest\n private const string ENDPOINT_PIPELINES = '/crm-pipelines/v1/pipelines/';\n private const string PIPELINE_OBJECT_TYPE_DEALS = 'deals';\n\n private const int TASK_VERIFICATION_CACHE_TTL = 86400; // 1 day\n\n /**\n * @var ClientInterface|Client\n */\n protected $client;\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected ProspectPhotoPathService $prospectPhotoPathService;\n\n private SyncFieldAction $syncFieldAction;\n private PayloadBuilder $payloadBuilder;\n private SyncRelatedActivityManager $syncRelatedActivityManager;\n private SyncArchivedProfilesAction $syncArchivedProfilesAction;\n private WebhookSyncBatchProcessor $batchProcessor;\n\n public function __construct(\n Client $client,\n SyncFieldAction $syncFieldAction,\n PayloadBuilder $payloadBuilder,\n ProspectPhotoPathService $prospectPhotoPathService,\n SyncArchivedProfilesAction $syncArchivedProfilesAction,\n WebhookSyncBatchProcessor $batchProcessor,\n ) {\n parent::__construct();\n\n $this->client = $client;\n $this->syncFieldAction = $syncFieldAction;\n $this->prospectPhotoPathService = $prospectPhotoPathService;\n $this->payloadBuilder = $payloadBuilder;\n $this->syncArchivedProfilesAction = $syncArchivedProfilesAction;\n $this->batchProcessor = $batchProcessor;\n $this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [\n 'client' => $this->client,\n ]);\n $this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [\n 'client' => $this->client,\n 'payloadBuilder' => $this->payloadBuilder,\n 'logger' => $this->logger,\n ]);\n $this->crmEntityRepository = app(CrmEntityRepository::class);\n $this->dealFieldsService = app(DealFieldsService::class);\n }\n\n public function getDisplayName(): string\n {\n return 'HubSpot';\n }\n\n protected function getOAuthAccount(User $user): ?SocialAccount\n {\n // In this case, the Account Owner is always the connection for any API operations.\n $owner = $user->team->owner;\n\n return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);\n }\n\n public function getClient(): Client\n {\n /** @var Client */\n return $this->client;\n }\n\n /**\n * Convert raw field data into a format compatible with CRM APIs.\n *\n * @param bool $internal Direction of the conversion.\n * True is pulling from CRM, false normalize before sending to CRM.\n */\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return ValueNormalizer::normalize(\n fieldType: $fieldType,\n fieldValue: $fieldValue,\n isInbound: $internal,\n );\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultFields(string $activityType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n $defaultFields = FieldDefinitions::defaultTaskFields();\n\n // This lazy creates these fields if not already setup.\n foreach ($defaultFields as $defaultField) {\n $fields[] = $this->config->fields()->firstOrCreate($defaultField);\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityField(string $activityType): Field\n {\n /** @var Field $activityField */\n $activityField = $this->config->fields()->where([\n 'crm_provider_id' => 'activityType',\n 'object_type' => $activityType,\n ])->first();\n\n return $activityField;\n }\n\n /**\n * @inheritdoc\n */\n public function getSupportedPlaybookTypes(): array\n {\n return [Playbook::ACTIVITY_TYPE_TASK];\n }\n\n /**\n * @inheritdoc\n */\n public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array\n {\n $fields = [];\n\n if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {\n // Outcome should always be provided calls/meetings.\n $fieldData = [\n [\n 'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',\n 'object_type' => Field::OBJECT_TASK,\n ],\n ];\n\n foreach ($fieldData as $data) {\n $field = $this->config->fields()->where($data)->first();\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n }\n\n return $fields;\n }\n\n public function getDealInsightsFields(): array\n {\n return FieldDefinitions::dealInsightsFields();\n }\n\n protected function getDefaultFollowupLayoutFields(string $activityType): array\n {\n $fields = [];\n $fieldRepo = app(FieldRepository::class);\n $fieldData = FieldDefinitions::followupFieldsFilter();\n\n foreach ($fieldData as $data) {\n $field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);\n\n // Only add the field if it is created, which it should be.\n if ($field) {\n $fields[] = $field;\n }\n }\n\n return $fields;\n }\n\n /**\n * @inheritdoc\n */\n public function syncField(Field $field): void\n {\n switch ($field->object_type) {\n case Field::OBJECT_ACCOUNT:\n $crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_CONTACT:\n $crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_OPPORTUNITY:\n $crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);\n\n break;\n case Field::OBJECT_TASK:\n $this->syncSingleTaskField($field);\n\n return;\n default:\n return;\n }\n\n $this->syncFieldAction->execute($field, $crmField->toArray());\n }\n\n /**\n * @param array<array{\n * id:string,\n * label:string,\n * value?:string\n * }> $options\n *\n * @throws CrmException\n *\n * @return FieldData[]\n *\n */\n public function importPicklistValues(\n Field $field,\n array $options = [['id' => '', 'label' => '', 'value' => '']],\n ): array {\n if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {\n // We already have the options, no need to fetch them again\n return $this->importOptions($field, $options);\n }\n\n $options = [];\n\n switch ($field->getObjectType()) {\n case Field::OBJECT_ACCOUNT:\n $options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_CONTACT:\n $options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());\n\n break;\n\n case Field::OBJECT_OPPORTUNITY:\n // Hubspot has different endpoint for stages\n $options = $this->getClient()->fetchOpportunityFieldOptions($field);\n\n break;\n\n case Field::OBJECT_TASK:\n if ($field->getCrmProviderId() === 'disposition') {\n $options = $this->getClient()->fetchDispositionFieldOptions();\n } elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {\n $options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);\n }\n\n break;\n\n default:\n $this->logger->warning('Invalid object type', [\n 'object_type' => $field->getObjectType(),\n 'field_id' => $field->getId(),\n ]);\n\n throw new CrmException('Invalid object type');\n }\n\n return $this->importOptions($field, $options);\n }\n\n /**\n * @inheritdoc\n */\n public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage\n {\n $missingStage = null;\n\n try {\n // Use the HubSpot API client instead of the SDK crmPipelines() method\n $endpoint = self::getDealsPipelinesEndpoint();\n $pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);\n $pipelines = $pipelinesResponse->data->results;\n } catch (RequestException|BadRequest $exception) {\n throw $exception;\n }\n\n foreach ($pipelines as $pipeline) {\n $stages = [];\n\n // We create a business process to contain the pipeline, and store all stages against it.\n $p = ResponseNormalize::normalizePipeline($pipeline);\n\n // Create/update business process for this pipeline\n $businessProcess = $this->config->businessProcesses()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'type' => BusinessProcess::TYPE_OPPORTUNITY,\n 'is_selectable' => $p['active'],\n ]);\n\n // A record type is really a clone of the business process, used to store which record uses which pipeline.\n // Create/update record type clone\n $this->config->recordTypes()->updateOrCreate([\n 'crm_provider_id' => $p['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($p['label'], 0, 150),\n 'is_selectable' => $p['active'],\n 'business_process_id' => $businessProcess->id ?? null,\n ]);\n\n // Stages - fetch all existing stages upfront to avoid N+1 queries\n $existingStages = $this->config->stages()\n ->withTrashed()\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->get()\n ->keyBy('crm_provider_id');\n\n foreach ($p['stages'] as $dealStage) {\n $s = ResponseNormalize::normalizeDealStage($dealStage);\n\n /** @var ?Stage $existingStage */\n $existingStage = $existingStages->get($s['id']);\n\n // Restore soft-deleted stages that are now active in HubSpot\n if ($existingStage?->trashed() && $s['active']) {\n $existingStage->restore();\n }\n\n // Upsert stage (updates soft-deleted records without restoring them)\n $stage = $this->config->stages()->withTrashed()->updateOrCreate([\n 'crm_provider_id' => $s['id'],\n ], [\n 'team_id' => $this->team->id,\n 'name' => mb_strimwidth($s['label'], 0, 50),\n 'label' => mb_strimwidth($s['label'], 0, 191),\n 'type' => Stage::TYPE_OPPORTUNITY,\n 'sequence' => $s['displayOrder'],\n 'is_selectable' => $s['active'],\n 'probability' => $s['probability'] * 100,\n ]);\n\n if ($missingStageName === $s['id']) {\n $missingStage = $stage;\n }\n\n $stages[] = $stage->id;\n }\n\n $businessProcess->stages()->sync($stages);\n }\n\n return $missingStage;\n }\n\n /**\n * @inheritdoc\n */\n public function syncOrganization(): void\n {\n try {\n $endpoint = 'https://api.hubapi.com/integrations/v1/me';\n $response = $this->client->getInstance()->getClient()->request('get', $endpoint);\n\n $accountData = $response->data;\n $this->config->update(['default_currency' => $accountData->currency]);\n } catch (BadRequest $e) {\n throw new CrmException('Could not sync the organization.', $e->getCode(), $e);\n }\n }\n\n /**\n * @inheritdoc\n *\n * @throws CrmException\n */\n public function syncProfiles(?User $userToSearch = null): ?Profile\n {\n $this->syncArchivedProfilesAction->execute($this->team, $this->client, $this->config);\n\n try {\n $owners = $this->client->getOwners();\n } catch (\\HubSpot\\Client\\Crm\\Owners\\ApiException $e) {\n $this->logger->error('[HubSpot] Could not sync the profiles.', [\n 'team_id' => $this->team->getId(),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new CrmException('Could not sync the profiles.', $e->getCode(), $e);\n }\n\n $profileRepository = app(ProfileRepository::class);\n $teamRepository = app(TeamRepository::class);\n\n foreach ($owners as $owner) {\n if ($owner->getArchived()) {\n // not supposed to fetch archived, but log anyway\n $this->logger->warning('[HubSpot] Found archived owner', [\n 'crm_provider_id' => $owner->getId(),\n 'email' => $owner->getEmail(),\n ]);\n\n continue;\n }\n\n $email = $owner->getEmail();\n if ($email === null) {\n continue;\n }\n\n $user = $teamRepository->findActiveTeamMemberByEmail($this->team, $email);\n\n if (! $user instanceof User) {\n continue;\n }\n\n $profile = $profileRepository->updateOrCreateProfile($user, [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $owner->getId(),\n ]);\n\n if ($userToSearch && $userToSearch->getId() === $user->getId()) {\n return $profile;\n }\n }\n\n return null;\n }\n\n private function generateNameSearchPayload(string $name, int $offset, int $limit): array\n {\n $payload = [\n 'query' => $name,\n 'sorts' => [\n [\n 'propertyName' => 'modifieddate',\n 'direction' => 'DESCENDING',\n ],\n ],\n 'properties' => [\n 'email',\n 'firstname',\n 'lastname',\n 'country',\n 'phone',\n 'mobilephone',\n 'jobtitle',\n 'hubspot_owner_id',\n 'associatedcompanyid',\n 'photo',\n 'industry',\n 'name',\n 'company',\n ],\n 'limit' => $limit,\n 'after' => $offset,\n ];\n\n $this->logger->debug('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n return $payload;\n }\n\n /**\n * @inheritdoc\n */\n public function find(string $name, array $scopes): array\n {\n $count = $this->limit ?? 20;\n $offset = $this->offset ?? 0;\n\n /** @var array<int, array<string, mixed>> */\n return Cache::remember(\n key: $this->team->getId() . $name . $count . $offset,\n ttl: 300,\n callback: function () use ($name, $offset, $count): array {\n $data = [];\n\n // Use the new V3 API to find contacts based on additional fields.\n foreach (['companies', 'contacts'] as $objectType) {\n $payload = $this->generateNameSearchPayload($name, $offset, $count);\n $type = $objectType === 'companies' ? 'account' : 'contact';\n\n try {\n $response = $this->client->search($objectType, $payload);\n\n // Build mapped list.\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n\n $objectName = $this->buildContactName($properties);\n\n $record = [\n 'crmId' => $object['id'],\n // Pass crmUrl to the FE, needed for success message in the extension when you log activity.\n 'crmUrl' => $this->generateProviderUrl($object['id'], $type),\n 'name' => $objectName,\n 'prospectType' => $type,\n 'phoneNumbers' => [],\n ];\n\n if ($type === 'account') {\n $record['industry'] = $properties['industry'] ?? null;\n } else {\n $record['title'] = $properties['jobtitle'] ?? null;\n $record['organization'] = $properties['company'] ?? null;\n }\n\n $countryCode = $this->buildContactCountry($properties);\n $parsedNumber = $this->buildContactPhone($countryCode, $properties);\n\n // Add phone number to record.\n if (! empty($parsedNumber['phone'])) {\n $record['phoneNumbers'][] = [\n 'number' => $parsedNumber['phone'],\n 'nationalFormat' => phone_national($countryCode, $parsedNumber['phone']),\n 'type' => 'phone',\n ];\n }\n\n // Add mobile phone number to record.\n if (! empty($properties['mobilephone'])) {\n $mobileNumber = phone_e164($countryCode, $properties['mobilephone']);\n if ($mobileNumber !== null) {\n $record['phoneNumbers'][] = [\n 'number' => $mobileNumber,\n 'nationalFormat' => phone_national($countryCode, $mobileNumber),\n 'type' => 'mobile',\n ];\n }\n }\n\n $data[] = $record;\n }\n } catch (BadRequest $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->getUuid(),\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n }\n\n return $data;\n },\n );\n }\n\n\n /**\n * @inheritdoc\n */\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n $ownerId = null;\n\n if ($crmAccountId === null) {\n return $data;\n }\n\n if ($userId) {\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n $ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n $closedStages = $this->getClosedDealStages();\n $payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(\n $this->config,\n $crmAccountId,\n $closedStages,\n );\n\n $results = $this->client->getPaginatedData($payload, 'deals');\n\n foreach ($results['results'] as $object) {\n $properties = $object['properties'];\n\n $amount = null;\n if (empty($properties['amount']) === false) {\n $currency = $properties['deal_currency_code'] ?? $this->config->default_currency;\n\n // Values can contain commas and any junk so strip them.\n $value = (float) preg_replace('/[^\\d.]/', '', $properties['amount']);\n $amount = formatCurrency($value, $currency);\n }\n\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n\n if ($businessProcess === null) {\n // Import it.\n $stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);\n $businessProcess = $this->config\n ->businessProcesses()\n ->where('crm_provider_id', $properties['pipeline'])\n ->first();\n } else {\n $stage = $businessProcess\n ->stages()\n ->where('crm_provider_id', $properties['dealstage'])\n ->where('type', Stage::TYPE_OPPORTUNITY)\n ->first();\n\n if ($stage === null) {\n // Import it.\n $stage = $this->importStages(null, $properties['dealstage']);\n }\n }\n\n $recordType = null;\n if ($businessProcess) {\n $recordType = $businessProcess->recordTypes()->first();\n }\n\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $record = [\n 'crmId' => $object['id'],\n 'name' => $properties['dealname'] ?? 'Unknown Deal',\n 'value' => $amount,\n 'won' => $isWon,\n 'closed' => $isWon || $isLost,\n 'stage' => [\n 'id' => $stage?->getUuid() ?? '',\n 'name' => $stage?->getName() ?? '',\n ],\n ];\n\n if ($recordType) {\n $record += [\n 'recordType' => [\n 'id' => $recordType->id_string,\n 'name' => $recordType->name,\n ],\n ];\n }\n\n if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n }\n\n /**\n * @inheritdoc\n */\n public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array\n {\n $data = [];\n switch ($objectType) {\n case 'contact':\n $hsObject = 'contact';\n\n break;\n case 'account':\n $hsObject = 'company';\n\n break;\n default:\n // This is a hack to prioritise and override a contact/company with a deal.\n if ($opportunityId) {\n $hsObject = 'deal';\n $objectId = $opportunityId;\n } else {\n throw new InvalidArgumentException('Object type not supported.');\n }\n }\n\n $engagementTypes = ['meetings', 'tasks'];\n\n foreach ($engagementTypes as $engagementType) {\n $payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);\n\n $this->logger->info('[HubSpot] CRM Search requested', [\n 'request' => $payload,\n ]);\n\n $engagements = $this->client->getPaginatedData($payload, $engagementType);\n\n foreach ($engagements['results'] as $engagement) {\n if ($engagementType == 'meetings') {\n $title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';\n } elseif ($engagementType == 'tasks') {\n $title = $engagement['properties']['hs_task_subject'];\n } else {\n $title = 'Scheduled meeting';\n }\n\n $data[] = [\n 'crmId' => $engagement['id'],\n 'subject' => $title,\n 'due' => $engagement['properties']['hs_timestamp'],\n 'type' => $engagement['properties']['hs_activity_type'] ?? null,\n ];\n }\n }\n\n usort($data, function ($item1, $item2) {\n return $item2['due'] <=> $item1['due'];\n });\n\n return $data;\n }\n\n /**\n * Try to find CRM Objects using email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchExactlyByEmail(string $email, ?int $userId = null): ?array\n {\n $contactProperties = [\n 'email',\n 'firstname',\n 'lastname',\n 'country',\n 'phone',\n 'mobilephone',\n 'jobtitle',\n 'hubspot_owner_id',\n 'associatedcompanyid',\n 'photo',\n ];\n $contact = null;\n $account = null;\n\n try {\n $hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);\n\n if ($hsContact) {\n $contact = $this->importContact($hsContact);\n $account = $contact->account;\n }\n\n $data = $this->convertCrmData($contact, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n } catch (BadRequest $e) {\n $this->logger->warning('[HubSpot] Search failed', [\n 'team_id' => $this->team->getId(),\n 'search_identifier' => $email,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return null;\n }\n\n public function getDomain(string $email): ?string\n {\n return $this->getDomainFromEmail($email);\n }\n\n /**\n * Try to find CRM objects using domain name of the email address\n *\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByDomain(string $domain, ?int $userId = null): ?array\n {\n $companyName = $domain;\n\n // Try to find a company matching their email domain.\n $companyProperties = [\n 'country',\n 'phone',\n 'name',\n 'hs_avatar_filemanager_key',\n 'industry',\n 'hubspot_owner_id',\n 'domain',\n ];\n\n try {\n $hsAccounts = $this->client\n ->getInstance()\n ->companies()\n ->searchByDomain($companyName, $companyProperties);\n } catch (Throwable $e) {\n $this->logger->info('[HubSpot] Search failed', [\n 'error' => $e->getMessage(),\n 'domain' => $domain,\n ]);\n\n return null;\n }\n\n $account = null;\n // If there are multiple accounts, don't guess, we'll ask later.\n if (\\count($hsAccounts->data->results) === 1) {\n // Persist this remote object.\n $account = $this->syncAccount($hsAccounts->data->results[0]->companyId);\n }\n\n $data = $this->convertCrmData(null, $account, $userId);\n\n return ! empty(array_filter($data)) ? $data : null;\n }\n\n /**\n * @return array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array\n {\n $countryCode = null;\n if ($contact && $contact->country_code) {\n $countryCode = $contact->country_code;\n } elseif ($account && $account->country_code) {\n $countryCode = $account->country_code;\n }\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact ? $contact->crm_provider_id : null,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n // If there are multiple opportunities, don't guess, we'll ask later.\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n protected function getCacheKey(string $object, ?int $userId = null): ?string\n {\n $key = $this->team->getId() . $object;\n $keySuffix = $this->getOwnerKeySuffix($userId);\n\n return $key . $keySuffix;\n }\n\n private function getOwnerKeySuffix(?int $userId = null): string\n {\n return $userId === null ? '' : (string) $userId;\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n *}\n */\n public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array\n {\n if (str_contains($phone, '**')) {\n return null;\n }\n\n // trim all whitespaces if present so the lookup doesn't fail\n $phone = str_replace(' ', '', $phone);\n\n // Check if the user is internal.\n if ($this->isPhoneNumberOfTeamMember($phone)) {\n return null;\n }\n\n $response = $this->searchForPhoneNumber($phone);\n if (empty($response)) {\n return null;\n }\n\n // This would ideally importContact instead but the response type differs.\n $contact = $this->findAndSyncContact($response['results'][0]['id']);\n if (! $contact instanceof Contact) {\n return null;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account?->crm_provider_id,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n\n try {\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n } catch (Exception $e) {\n $this->logger->debug('[HubSpot] Opportunity failed to sync.', [\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n }\n\n private function isPhoneNumberOfTeamMember(string $phone): bool\n {\n $teamRepository = app(TeamRepository::class);\n $user = $teamRepository->findTeamMemberByPhone($this->team, $phone);\n\n if ($user instanceof User) {\n return true;\n }\n\n return false;\n }\n\n private function findAndSyncContact(string $crmId): ?Contact\n {\n try {\n return $this->syncContact($crmId);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'reason' => $exception->getMessage(),\n ]);\n\n return null;\n }\n }\n\n private function hasResults(array $response): bool\n {\n return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;\n }\n\n private function searchForPhoneNumber(string $phone): array\n {\n // Normalizes the provided phone number for the API search.\n $normalizedPhone = $this->normalizePhoneNumber($phone);\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);\n\n $this->logger->info('[HubSpot] Phone match search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);\n\n if (! $this->hasResults($response)) {\n $nationalPhone = preg_replace('/\\D/', '', phone_national(null, $phone));\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);\n\n $this->logger->info('[HubSpot] Phone match national number search triggered', [\n 'phone' => $phone,\n 'nationalPhone' => $nationalPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n if (! $this->hasResults($response)) {\n $payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);\n\n $this->logger->info('[HubSpot] Phone match alternative search triggered', [\n 'phone' => $phone,\n 'normalizedPhone' => $normalizedPhone,\n 'payload' => $payload,\n ]);\n\n $response = $this->handlePhoneSearchRequest($phone, $payload);\n }\n\n return $this->hasResults($response) ? $response : [];\n }\n\n private function handlePhoneSearchRequest(string $phone, array $payload): array\n {\n try {\n return $this->client->search('contacts', $payload);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Phone match failed', [\n 'phone' => $phone,\n 'reason' => $exception->getMessage(),\n ]);\n\n return [];\n }\n }\n\n private function normalizePhoneNumber(string $phone): string\n {\n return ltrim(phone_e164(null, $phone), '+0');\n }\n\n /**\n * @return null|array{\n * Lead|null,\n * Account|null,\n * Opportunity|null,\n * Contact|null,\n * Stage|null,\n * string|null\n * }\n */\n public function matchByName(string $name, ?int $userId = null): ?array\n {\n // Don't waste time searching for single character strings.\n if (\\strlen($name) <= 1) {\n return null;\n }\n\n $cacheKey = $this->getCacheKey($name, $userId);\n\n $result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {\n $payload = $this->payloadBuilder->generateSearchContactsByNamePayload(\n $name,\n $this->getContactFields()\n );\n\n $hsContacts = $this->client->getPaginatedData($payload, 'contact');\n if (empty($hsContacts['results'])) {\n return false;\n }\n\n $contact = $this->importContact($hsContacts['results'][0]);\n if ($contact === null) {\n return false;\n }\n\n $account = $contact->account;\n $countryCode = $contact->country_code ?? $account->country_code ?? null;\n\n try {\n $hsOpportunities = $this->findOpportunities(\n $account ? $account->crm_provider_id : null,\n $contact->crm_provider_id,\n $userId\n );\n } catch (Exception $e) {\n $hsOpportunities = [];\n }\n\n $opportunity = null;\n $stage = null;\n if (! empty($hsOpportunities)) {\n // Persist this remote object.\n $opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);\n $stage = $opportunity?->getStage();\n }\n\n return [\n null,\n $account,\n $opportunity,\n $contact,\n $stage,\n $countryCode,\n ];\n });\n\n return is_array($result) ? $result : null;\n }\n\n\n private function convertActivityAssociations(Activity $activity): array\n {\n return [\n 'contactIds' => $this->getParticipantsIds($activity),\n 'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],\n 'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],\n 'ownerIds' => [],\n ];\n }\n\n private function getParticipantsIds(Activity $activity): array\n {\n $attendees = [];\n\n $participantRepository = app(ParticipantRepository::class);\n $participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);\n foreach ($participants as $participant) {\n if ($participant->user_id || $participant->isCoach()) {\n continue;\n }\n\n $contact = $participant->contact()->first();\n if ($contact && $contact->crm_provider_id) {\n $attendees[] = $contact->crm_provider_id;\n } else {\n if (! empty($participant->name)) {\n $attendeeData = $this->fetchMissingAttendeeInfo($participant);\n }\n if (! empty($attendeeData['id'])) {\n $attendees[] = $attendeeData['id'];\n }\n }\n }\n\n if ($activity->hasContact()) {\n $attendees[] = $activity->contact->crm_provider_id;\n }\n\n return array_unique($attendees);\n }\n\n private function fetchMissingAttendeeInfo(Participant $participant): array\n {\n // Check if we need to look inside an account context.\n $activity = $participant->getActivity();\n $companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;\n\n // First check the local data.\n /** @var Contact[] $contacts */\n $contacts = $this->team->contacts()\n ->with('account')\n ->where('name', $participant->name)\n ->whereNotNull('email')\n ->get();\n\n foreach ($contacts as $contact) {\n // If we have a company in scope, check the contact is associated to it.\n if (\n $companyId !== null\n && ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)\n ) {\n continue;\n }\n\n return [\n 'id' => $contact->crm_provider_id,\n 'email' => $contact->email,\n ];\n }\n\n $payload = $this->generateNameSearchPayload($participant->name, 0, 20);\n\n try {\n $response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);\n\n // TODO add some logic to choose the most suitable contact if multiple\n foreach ($response['results'] as $object) {\n $properties = $object['properties'];\n if (empty($object['properties']) === false) {\n // Check the company matches the contact.\n // Todo: Move this check inside the API search.\n if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {\n continue;\n }\n\n return [\n 'id' => $object['id'],\n 'email' => $properties['email'],\n ];\n }\n }\n } catch (Exception $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [\n 'teamId' => $this->team->id_string,\n 'request' => $payload,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n return [];\n }\n\n /**\n * Store transcripts as note engagement.\n *\n * @throws Exception\n */\n public function createTranscriptNotes(Activity $activity): void\n {\n // For HS no need to check if Crm profile - Log Notes field is enabled\n // We only check if store_transcript toggle is enabled on crm profile.\n $engagement = [\n 'active' => true,\n 'ownerId' => $this->profile->crm_provider_id,\n 'timestamp' => $activity->created_at->tz($activity->user->timezone)->getTimestamp() * 1000,\n 'type' => 'NOTE',\n ];\n\n // Generate activity transcription.\n $transcriptionData = $this->generateTranscription($activity);\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $transcripts = mb_strimwidth($transcriptionData, 0, static::ENGAGEMENT_BODY_MAX_LENGTH);\n\n $metadata = [\n 'body' => $transcripts,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsEngagement = $this->client\n ->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $noteId = $hsEngagement->data->engagement->id;\n\n // Store crm logged id in transcription.\n $transcription = $activity->getTranscription();\n $transcription->crm_activity_id = $noteId;\n $transcription->save();\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $payload = [\n 'properties' => $data,\n ];\n\n try {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n $this->client->getNewInstance()->crm()->deals()->basicApi()->update($objectId, $payload);\n\n break;\n case FieldData::OBJECT_CONTACT:\n $this->client->getNewInstance()->crm()->contacts()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_ACCOUNT:\n $this->client->getNewInstance()->crm()->companies()->basicApi()->update($objectId, $payload);\n\n break;\n\n case FieldData::OBJECT_TASK:\n // Endpoint for Engagements not ready\n $engagements = [\n 'type' => 'TASK',\n ];\n $metadata = $data;\n $this->client->getInstance()->engagements()->update($objectId, $engagements, $metadata);\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $objectId],\n $metadata,\n );\n\n break;\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $apiException) {\n $errorMessage = $apiException->getMessage();\n if ($apiException->getResponseBody()) {\n $responseBody = json_decode($apiException->getResponseBody(), true, 512, JSON_THROW_ON_ERROR);\n $errorMessage = $responseBody['message'] ?? $apiException->getMessage();\n }\n\n $this->logger->error(\n '[HubSpot] Update record failed',\n [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'payload' => $payload,\n 'reason' => $errorMessage,\n 'team' => $this->team->getUuid(),\n ]\n );\n\n throw new CrmException($errorMessage);\n }\n }\n\n /*\n * @inheritdoc\n */\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n switch ($objectType) {\n case FieldData::OBJECT_OPPORTUNITY:\n return $this->client->getInstance()->deals()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_CONTACT:\n return $this->client->getInstance()->contacts()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_ACCOUNT:\n return $this->client->getInstance()->companies()->getById($objectId)->toArray();\n\n case FieldData::OBJECT_TASK:\n return $this->client->getInstance()->engagements()->get($objectId)->toArray();\n\n default:\n throw new UnexpectedValueException('Unsupported object type \"' . $objectType . '\"');\n }\n }\n\n /**\n * @throws BadRequest\n * @throws CrmException\n */\n public function updateStage($crmObject, Stage $stage): void\n {\n $payload = [\n 'properties' => [\n [\n 'name' => 'dealstage',\n 'value' => $stage->crm_provider_id,\n ],\n ],\n ];\n\n try {\n $this->client->getInstance()->deals()->update($crmObject->crm_provider_id, $payload);\n } catch (BadRequest $badRequest) {\n if ($badRequest->getCode() === 403) {\n throw new CrmException(\n \"Sorry, you don't have permission to update this stage.\",\n $badRequest->getCode(),\n $badRequest,\n );\n }\n\n $this->logger->warning('[HubSpot] Stage update failed', [\n 'dealId' => $crmObject->crm_provider_id,\n 'payload' => $payload,\n 'message' => $badRequest->getMessage(),\n ]);\n\n throw $badRequest;\n }\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n $url = null;\n $baseUrl = 'https://app.hubspot.com/contacts/' . $this->config->crm_provider_id . '/';\n\n switch ($objectType) {\n case 'account':\n $url = $baseUrl . 'company/' . $providerId;\n\n break;\n\n case 'contact':\n $url = $baseUrl . 'contact/' . $providerId;\n\n break;\n\n case 'opportunity':\n $url = $baseUrl . 'deal/' . $providerId;\n\n break;\n\n case 'task':\n case 'activity':\n return null;\n\n // This should not be deep-linked as per JMNY-3934.\n //$url = $baseUrl.'tasks/list/view/all/?taskId='.$providerId;\n break;\n }\n\n return $url;\n }\n\n public function searchCalls(Carbon $from, Carbon $to, string $activityProvider): array\n {\n $this->logger->info('[HubSpot] Search calls', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $calls = [];\n $page = 1;\n\n do {\n try {\n $payload = $this->payloadBuilder->generateGetCallsPayload($from, $to, $activityProvider, $page);\n $response = $this->client->search('calls', $payload);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n $calls = array_merge($calls, $responseResults);\n $page++;\n } while (! empty($responseResults));\n\n return $calls;\n }\n\n public function searchCallsForPeriodByPage(Carbon $from, Carbon $to, int $page, bool $retry = true)\n {\n try {\n $payload = $this->payloadBuilder->generateSearchCallsByPeriodPayload($from, $to, $page);\n\n return $this->client->search('calls', $payload);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search calls for period failed', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallsForPeriodByPage($from, $to, $page, false);\n }\n\n return null;\n }\n }\n\n public function searchCallsForPeriod(Carbon $from, Carbon $to): Generator\n {\n $this->logger->info('[HubSpot] Search calls for period', [\n 'from' => $from->format(self::LOG_DATE_FORMAT),\n 'to' => $to->format(self::LOG_DATE_FORMAT),\n ]);\n\n $page = 1;\n\n do {\n $response = $this->searchCallsForPeriodByPage($from, $to, $page);\n\n $responseResults = empty($response['results']) ? [] : $response['results'];\n\n $associationContacts = $this->getAssociationDataForCollection($responseResults, 'calls', 'contacts');\n $associationCompanies = $this->getAssociationDataForCollection($responseResults, 'calls', 'companies');\n $associationDeals = $this->getAssociationDataForCollection($responseResults, 'calls', 'deals');\n\n foreach ($responseResults as $call) {\n $call['associations'] = [\n 'contacts' => $this->importAssociationData($call, $associationContacts),\n 'companies' => $this->importAssociationData($call, $associationCompanies),\n 'deals' => $this->importAssociationData($call, $associationDeals),\n ];\n\n yield $call;\n }\n $page++;\n } while (! empty($responseResults));\n }\n\n public function getCall(string $callId): array\n {\n $this->logger->info('[HubSpot] Get call', [\n 'call_id' => $callId,\n ]);\n\n $searchAttributes = $this->payloadBuilder->getSearchCallAttributes();\n $endpoint = sprintf(\n 'https://api.hubapi.com/crm/v3/objects/calls/%s',\n $callId,\n );\n\n try {\n $response = $this->client->getInstance()->getClient()->request(\n 'GET',\n $endpoint,\n [],\n sprintf(\n 'properties=%s&associations=contacts,companies,deals',\n implode(',', $searchAttributes),\n ),\n );\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Get call failed', [\n 'call_id' => $callId,\n 'reason' => $exception->getMessage(),\n ]);\n $response = null;\n }\n\n return empty($response) ? [] : $response->toArray();\n }\n\n public function bulkAddPlaybackURLToDescription(array $crmUpdateData): array\n {\n $crmUpdateBatches = array_chunk($crmUpdateData, self::BATCH_UPDATE_LIMIT);\n\n $updatedCrmIds = [];\n\n foreach ($crmUpdateBatches as $crmBatch) {\n $payload = $this->payloadBuilder->generatePlaybackAddUrlBatchPayload($crmBatch);\n $updateSuccess = $this->bulkAddPlaybackURLToDescriptionRequest($payload);\n if ($updateSuccess) {\n $updatedCrmIds = array_merge($updatedCrmIds, array_column($crmBatch, 'crm_id'));\n }\n }\n\n return $updatedCrmIds;\n }\n\n private function bulkAddPlaybackURLToDescriptionRequest(array $payload, bool $retry = true): bool\n {\n try {\n $this->client->getNewInstance()->crm()->objects()->batchApi()->update('calls', $payload);\n\n return true;\n } catch (\\HubSpot\\Client\\Crm\\Objects\\ApiException $e) {\n $response = json_decode($e->getResponseBody(), true);\n $retryAfter =\n isset($response['policyName'])\n && $response['policyName'] == self::TEN_SECONDLY_ROLLING_POLICY\n ? self::TEN_SECONDLY_ROLLING_LIMIT\n : 1;\n } catch (Exception $e) {\n $retryAfter = 1;\n }\n\n $this->logger->warning('[HubSpot] Bulk add playback url to CRM failed', [\n 'reason' => $e->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep($retryAfter);\n\n return $this->bulkAddPlaybackURLToDescriptionRequest($payload, false);\n }\n\n return false;\n }\n\n /**\n * Sometimes we have secondly rate limit error, then retry request after 1 second\n */\n public function searchCallByRecordingURLToken(string $playbackURLToken, bool $retry = true): array\n {\n $payload = $this->payloadBuilder->generateSearchCallByTokenPayload($playbackURLToken);\n\n $this->logger->info('[HubSpot] CRM Search by playback URL token requested', [\n 'request' => $payload,\n ]);\n\n try {\n $response = $this->client->search('calls', $payload);\n } catch (Exception $exception) {\n $this->logger->info('[HubSpot] Search by playback URL token failed', [\n 'playbackURLToken' => $playbackURLToken,\n 'reason' => $exception->getMessage(),\n 'retry' => $retry,\n ]);\n\n if ($retry) {\n sleep(1);\n\n return $this->searchCallByRecordingURLToken($playbackURLToken, false);\n }\n\n return [];\n }\n\n return empty($response['results']) ? [] : $response['results'][0];\n }\n\n /**\n * Generate transcription for the activity.\n */\n private function generateTranscription(Activity $activity): string\n {\n if (! $this->config->store_transcript) {\n // If sending transcription to activity toggle is disabled\n return '';\n }\n\n $transcriptionSegments = $this->transcriptionService->findTranscriptionByActivity($activity);\n\n if ($transcriptionSegments->isEmpty()) {\n return '';\n }\n\n $transcription = sprintf(\n '<p><strong>Transcript for %s</strong></p><p></p>',\n $activity->title ?? $activity->activity_title,\n );\n\n $roomOwnerParticipant = $activity->findParticipantRoomOwner();\n $roomOwnerParticipantId = $roomOwnerParticipant !== null\n ? $roomOwnerParticipant->getId()\n : null;\n\n\n $transcription .= $transcriptionSegments\n ->map(static function (array $transcriptionSegment) use ($roomOwnerParticipantId): string {\n $isOrganiser = $roomOwnerParticipantId === $transcriptionSegment['participantId']\n && $roomOwnerParticipantId !== null;\n $transcriptColor = $isOrganiser ? '#000000' : '#f0415a';\n\n return sprintf(\n '<span style=\"color: %s;\">%s | </span>%s',\n $transcriptColor,\n $transcriptionSegment['formattedStartsAt'],\n $transcriptionSegment['transcript'],\n );\n })\n ->implode('<br />');\n\n return $transcription;\n }\n\n /**\n * @param array<array{\n * id: string,\n * label: string,\n * value?: string,\n * }> $options\n *\n * @return FieldData[]\n */\n private function importOptions(Field $field, array $options): array\n {\n $fieldValues = [];\n $values = [];\n $sequence = 0;\n\n foreach ($options as $option) {\n $values[] = [\n 'value' => $option['value'] ?? $option['id'],\n 'label' => substr($option['label'], 0, 255),\n 'sequence' => $sequence++,\n ];\n }\n\n $fieldsToPurge = $field->values()->get()->pluck('value')->toArray();\n\n foreach ($values as $value) {\n $value['value'] = substr($value['value'], 0, 255);\n $fieldValues[] = $field->values()->updateOrCreate([\n 'value' => $value['value'],\n ], $value);\n\n // Remove this value from the ones we are going to purge.\n if (($key = array_search($value['value'], $fieldsToPurge, false)) !== false) {\n unset($fieldsToPurge[$key]);\n }\n }\n\n // Delete the old values that are no longer used.\n $field->values()->whereIn('value', $fieldsToPurge)->delete();\n\n return $fieldValues;\n }\n\n public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null || $objectId === null) {\n return null;\n }\n\n /** @var User $user */\n $user = $activity->getUser();\n\n $profile = $this->assignCrmOwner($user, $activity);\n if (! $profile instanceof Profile) {\n return null;\n }\n\n $timestamp = Carbon::now($user->getTimezone())->getTimestamp() * 1000;\n $engagement = [\n 'active' => true,\n 'ownerId' => $profile->getAttribute('crm_provider_id'),\n 'timestamp' => $timestamp,\n 'type' => 'NOTE',\n ];\n\n // Truncate Notes with max notes length because transcription text could be very long.\n $body = mb_strimwidth($body, 0, self::ENGAGEMENT_BODY_MAX_LENGTH);\n $metadata = [\n 'body' => $body,\n ];\n\n $associations = $this->convertActivityAssociations($activity);\n\n try {\n $hsActivityId = $this->client->createNote(\n body: $body,\n ownerId: $profile->getCrmProviderId(),\n timestamp: $timestamp,\n objectId: $objectId,\n noteObject: $noteObject,\n );\n\n $this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);\n\n $this->logger->info('[HubSpot] Saving Transcription Summary as Note', [\n 'activity' => $activity->getUuid(),\n 'crmActivity' => $hsActivityId,\n ]);\n\n return $hsActivityId;\n } catch (Exception $e) {\n Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function attachSummaryToActivity(ActivityContract $activity, string $summaryTitle, string $summaryContents): bool\n {\n $this->logger->info('[HubSpot] Attaching summary to activity', [\n 'activity' => $activity->getUuid(),\n 'summary_content' => $summaryContents,\n ]);\n\n if (! $activity instanceof Activity) {\n throw new InvalidArgumentException('Expected instance of Activity');\n }\n\n $summary = '<p><strong>' . $summaryTitle . '</strong></p>';\n $summary .= '<p>' . $summaryContents . '</p>';\n $metadata = $this->buildMetadataForSummaryUpdate($activity, $summary);\n\n try {\n $type = $this->matchActivityEngagementType($activity);\n $engagement = ['type' => $type];\n\n $this->client->updateEngagement($activity->getCrmProviderId(), $engagement, $metadata);\n } catch (Exception $e) {\n $this->logger->warning('[HubSpot] Update summary failed', [\n 'activity' => $activity->getUuid(),\n 'reason' => $e->getMessage(),\n ]);\n\n return false;\n }\n\n $this->logCrmEngagementManipulation(\n self::ACTION_UPDATE,\n ['crmId' => $activity->getCrmProviderId()],\n $metadata,\n );\n\n return true;\n }\n\n private function buildMetadataForSummaryUpdate(Activity $activity, string $summary): array\n {\n $descriptionField = $activity->getType() === Activity::TYPE_CONFERENCE ? 'internalMeetingNotes' : 'body';\n $engagement = $this->client->getEngagementData($activity->getCrmProviderId());\n // Meeting without internalMeetingNotes might mean it just does not have any notes;\n $description = $engagement['metadata'][$descriptionField] ?? null;\n\n if (empty($description)) {\n $data = $summary;\n } else {\n // avoid playbook url link to Jiminny being sent twice in the activity description\n $targetUrl = PlaybackUrlBuilder::build($activity);\n\n if (str_contains($description, $targetUrl)) {\n $jiminnyUrl = '<p><a href=\"' . $targetUrl . '\" title=\"Play at Jiminny\">Play at Jiminny</a></p>';\n $summary = str_replace($jiminnyUrl, '', $summary);\n\n $this->logger->info('[HubSpot] Summary modified', [\n 'activity' => $activity->getUuid(),\n 'target_url' => $jiminnyUrl,\n 'modified_summary_content' => $summary,\n ]);\n }\n\n $data = $description . '<p></p>' . $summary;\n }\n\n return [\n $descriptionField => $data,\n ];\n }\n\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n return $this->syncRelatedActivityManager->fetchAndAssociateRelatedActivity($activity);\n }\n\n public function fetchRelatedActivity(Activity $activity): array\n {\n return [];\n }\n\n public function getDealsInBulk(array $dealIds): array\n {\n $payload = $this->payloadBuilder->getDealsInBulkPayload($dealIds);\n\n return $this->client->getPaginatedData($payload, 'deals');\n }\n\n /**\n * Extract deal IDs from HubSpot search response.\n *\n * @param array $hubspotResponse The raw HubSpot search API response.\n * @param bool $includeArchived Whether to include archived deals (default: false).\n *\n * @return string[] Array of deal IDs as strings.\n */\n public function extractDealIds(array $hubspotResponse, bool $includeArchived = false): array\n {\n if (empty($hubspotResponse['results'])) {\n return [];\n }\n\n return array_values(\n array_map(\n fn ($deal) => $deal['id'],\n array_filter(\n $hubspotResponse['results'],\n fn ($deal) => $includeArchived || empty($deal['archived'])\n )\n )\n );\n }\n\n public function matchActivityEngagementType(Activity $activity): string\n {\n return match ($activity->getType()) {\n Activity::TYPE_CONFERENCE => self::TYPE_MEETING,\n Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND => self::TYPE_CALL,\n default => self::TYPE_NOTE,\n };\n }\n\n private function assignCrmOwner(User $user, ActivityContract $activity): ?Profile\n {\n $profile = $user->getProfile();\n if ($profile instanceof Profile) {\n return $profile;\n }\n\n $this->logger->info('[HubSpot] Unable to save summary. No profile', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n private static function getDealsPipelinesEndpoint(): string\n {\n return self::API_URL . self::ENDPOINT_PIPELINES . self::PIPELINE_OBJECT_TYPE_DEALS;\n }\n\n public function verifyTaskExists(Activity $activity): bool\n {\n $crmProviderId = $activity->getCrmProviderId();\n $cacheKey = \"crm_task_exists:{$this->config->getId()}:$crmProviderId\";\n\n return Cache::remember($cacheKey, self::TASK_VERIFICATION_CACHE_TTL, function () use ($crmProviderId) {\n try {\n $engagement = $this->client->getEngagementData($crmProviderId);\n\n return ! empty($engagement);\n } catch (HttpNotFoundException|BadRequest) {\n // Engagement not found in CRM - this is expected and permanent\n $this->logger->info('[Hubspot] Engagement not found during verification', [\n 'engagement_id' => $crmProviderId,\n 'config_id' => $this->config->getId(),\n ]);\n\n return false;\n }\n // Let other exceptions (network errors, rate limits, etc.) bubble up for retry\n });\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"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":"19","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","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}]...
|
4197785642954207911
|
-320939073545824153
|
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
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
7
48
1
33
1
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Services\Crm\Hubspot;
use Carbon\Carbon;
use Exception;
use Generator;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Support\Facades\Cache;
use InvalidArgumentException;
use Jiminny\Contracts\Repositories\TeamRepository;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\HubspotInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SavePlaybackLinkToCrmInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Contracts\Services\Crm\VerifyTaskExistsInterface;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\HttpNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contact;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Models\Crm\Field;
use Jiminny\Models\Crm\FieldData;
use Jiminny\Models\Crm\Layout;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Participant;
use Jiminny\Models\Playbook;
use Jiminny\Models\SocialAccount;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Repositories\Crm\FieldRepository;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\ParticipantRepository;
use Jiminny\Services\Avatar\ProspectPhotoPathService;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\Hubspot\Actions\SyncArchivedProfilesAction;
use Jiminny\Services\Crm\Hubspot\Fields\ValueNormalizer;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\OpportunitySyncTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\SyncFieldsTrait;
use Jiminny\Services\Crm\Hubspot\ServiceTraits\WriteCrmTrait;
use Jiminny\Services\Crm\MatchDomainByEmailInterface;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Services\Crm\ResolveCompanyNameByEmailTrait;
use Jiminny\Utils\PlaybackUrlBuilder;
use Sentry;
use SevenShores\Hubspot\Exceptions\BadRequest;
use Throwable;
use UnexpectedValueException;
/**
* @phpstan-type CrmFieldDefinition array{
* name: string,
* label: string,
* description: string,
* type: string,
* fieldType: string,
* hidden: bool,
* showCurrencySymbol: bool,
* options: array<array{
* id: string,
* label: string,
* value?: string,
* }
*/
class Service extends BaseService implements
HubspotInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
SendSummaryToCrmInterface,
MatchDomainByEmailInterface,
SavePlaybackLinkToCrmInterface,
RemoteEntityManipulationInterface,
FetchRelatedActivityInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
VerifyTaskExistsInterface
{
use ResolveCompanyNameByEmailTrait;
use SyncCrmEntitiesTrait;
use WriteCrmTrait;
use SyncFieldsTrait;
use OpportunitySyncTrait;
private const int ENGAGEMENT_BODY_MAX_LENGTH = 65536;
private const string LOG_DATE_FORMAT = 'Y-m-d H:i:s';
private const int BATCH_UPDATE_LIMIT = 100;
private const string TEN_SECONDLY_ROLLING_POLICY = 'TEN_SECONDLY_ROLLING';
private const int TEN_SECONDLY_ROLLING_LIMIT = 10;
private const string TYPE_NOTE = 'NOTE';
private const string TYPE_MEETING = 'MEETING';
private const string TYPE_CALL = 'CALL';
private const string API_URL = '[URL_WITH_CREDENTIALS] ClientInterface|Client
*/
protected $client;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected ProspectPhotoPathService $prospectPhotoPathService;
private SyncFieldAction $syncFieldAction;
private PayloadBuilder $payloadBuilder;
private SyncRelatedActivityManager $syncRelatedActivityManager;
private SyncArchivedProfilesAction $syncArchivedProfilesAction;
private WebhookSyncBatchProcessor $batchProcessor;
public function __construct(
Client $client,
SyncFieldAction $syncFieldAction,
PayloadBuilder $payloadBuilder,
ProspectPhotoPathService $prospectPhotoPathService,
SyncArchivedProfilesAction $syncArchivedProfilesAction,
WebhookSyncBatchProcessor $batchProcessor,
) {
parent::__construct();
$this->client = $client;
$this->syncFieldAction = $syncFieldAction;
$this->prospectPhotoPathService = $prospectPhotoPathService;
$this->payloadBuilder = $payloadBuilder;
$this->syncArchivedProfilesAction = $syncArchivedProfilesAction;
$this->batchProcessor = $batchProcessor;
$this->opportunitySyncStrategyResolver = app(OpportunitySyncStrategyResolver::class, [
'client' => $this->client,
]);
$this->syncRelatedActivityManager = app(SyncRelatedActivityManager::class, [
'client' => $this->client,
'payloadBuilder' => $this->payloadBuilder,
'logger' => $this->logger,
]);
$this->crmEntityRepository = app(CrmEntityRepository::class);
$this->dealFieldsService = app(DealFieldsService::class);
}
public function getDisplayName(): string
{
return 'HubSpot';
}
protected function getOAuthAccount(User $user): ?SocialAccount
{
// In this case, the Account Owner is always the connection for any API operations.
$owner = $user->team->owner;
return $owner->getSocialAccount(SocialAccount::PROVIDER_HUBSPOT);
}
public function getClient(): Client
{
/** @var Client */
return $this->client;
}
/**
* Convert raw field data into a format compatible with CRM APIs.
*
* @param bool $internal Direction of the conversion.
* True is pulling from CRM, false normalize before sending to CRM.
*/
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return ValueNormalizer::normalize(
fieldType: $fieldType,
fieldValue: $fieldValue,
isInbound: $internal,
);
}
/**
* @inheritdoc
*/
public function getDefaultFields(string $activityType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
$defaultFields = FieldDefinitions::defaultTaskFields();
// This lazy creates these fields if not already setup.
foreach ($defaultFields as $defaultField) {
$fields[] = $this->config->fields()->firstOrCreate($defaultField);
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function getDefaultActivityField(string $activityType): Field
{
/** @var Field $activityField */
$activityField = $this->config->fields()->where([
'crm_provider_id' => 'activityType',
'object_type' => $activityType,
])->first();
return $activityField;
}
/**
* @inheritdoc
*/
public function getSupportedPlaybookTypes(): array
{
return [Playbook::ACTIVITY_TYPE_TASK];
}
/**
* @inheritdoc
*/
public function getDefaultActivityLayoutFields(string $activityType, string $layoutType): array
{
$fields = [];
if ($activityType === Playbook::ACTIVITY_TYPE_TASK) {
// Outcome should always be provided calls/meetings.
$fieldData = [
[
'crm_provider_id' => $layoutType === Layout::TYPE_SOFTPHONE_SUMMARY ? 'disposition' : 'meetingOutcome',
'object_type' => Field::OBJECT_TASK,
],
];
foreach ($fieldData as $data) {
$field = $this->config->fields()->where($data)->first();
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
}
return $fields;
}
public function getDealInsightsFields(): array
{
return FieldDefinitions::dealInsightsFields();
}
protected function getDefaultFollowupLayoutFields(string $activityType): array
{
$fields = [];
$fieldRepo = app(FieldRepository::class);
$fieldData = FieldDefinitions::followupFieldsFilter();
foreach ($fieldData as $data) {
$field = $fieldRepo->findOneConfigurationFieldByProperties($this->config, $data);
// Only add the field if it is created, which it should be.
if ($field) {
$fields[] = $field;
}
}
return $fields;
}
/**
* @inheritdoc
*/
public function syncField(Field $field): void
{
switch ($field->object_type) {
case Field::OBJECT_ACCOUNT:
$crmField = $this->client->getInstance()->companyProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_CONTACT:
$crmField = $this->client->getInstance()->contactProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_OPPORTUNITY:
$crmField = $this->client->getInstance()->dealProperties()->get($field->crm_provider_id);
break;
case Field::OBJECT_TASK:
$this->syncSingleTaskField($field);
return;
default:
return;
}
$this->syncFieldAction->execute($field, $crmField->toArray());
}
/**
* @param array<array{
* id:string,
* label:string,
* value?:string
* }> $options
*
* @throws CrmException
*
* @return FieldData[]
*
*/
public function importPicklistValues(
Field $field,
array $options = [['id' => '', 'label' => '', 'value' => '']],
): array {
if (! empty($options[0]['id']) || ! empty($options[0]['value'])) {
// We already have the options, no need to fetch them again
return $this->importOptions($field, $options);
}
$options = [];
switch ($field->getObjectType()) {
case Field::OBJECT_ACCOUNT:
$options = $this->getClient()->fetchPropertyOptions('company', $field->getCrmProviderId());
break;
case Field::OBJECT_CONTACT:
$options = $this->getClient()->fetchPropertyOptions('contact', $field->getCrmProviderId());
break;
case Field::OBJECT_OPPORTUNITY:
// Hubspot has different endpoint for stages
$options = $this->getClient()->fetchOpportunityFieldOptions($field);
break;
case Field::OBJECT_TASK:
if ($field->getCrmProviderId() === 'disposition') {
$options = $this->getClient()->fetchDispositionFieldOptions();
} elseif (in_array($field->getCrmProviderId(), ['meetingOutcome', 'activityType'])) {
$options = $this->getClient()->fetchMeetingOutcomeFieldOptions($field);
}
break;
default:
$this->logger->warning('Invalid object type', [
'object_type' => $field->getObjectType(),
'field_id' => $field->getId(),
]);
throw new CrmException('Invalid object type');
}
return $this->importOptions($field, $options);
}
/**
* @inheritdoc
*/
public function importStages(?array $types = null, ?string $missingStageName = null): ?Stage
{
$missingStage = null;
try {
// Use the HubSpot API client instead of the SDK crmPipelines() method
$endpoint = self::getDealsPipelinesEndpoint();
$pipelinesResponse = $this->client->getInstance()->getClient()->request('GET', $endpoint);
$pipelines = $pipelinesResponse->data->results;
} catch (RequestException|BadRequest $exception) {
throw $exception;
}
foreach ($pipelines as $pipeline) {
$stages = [];
// We create a business process to contain the pipeline, and store all stages against it.
$p = ResponseNormalize::normalizePipeline($pipeline);
// Create/update business process for this pipeline
$businessProcess = $this->config->businessProcesses()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'type' => BusinessProcess::TYPE_OPPORTUNITY,
'is_selectable' => $p['active'],
]);
// A record type is really a clone of the business process, used to store which record uses which pipeline.
// Create/update record type clone
$this->config->recordTypes()->updateOrCreate([
'crm_provider_id' => $p['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($p['label'], 0, 150),
'is_selectable' => $p['active'],
'business_process_id' => $businessProcess->id ?? null,
]);
// Stages - fetch all existing stages upfront to avoid N+1 queries
$existingStages = $this->config->stages()
->withTrashed()
->where('type', Stage::TYPE_OPPORTUNITY)
->get()
->keyBy('crm_provider_id');
foreach ($p['stages'] as $dealStage) {
$s = ResponseNormalize::normalizeDealStage($dealStage);
/** @var ?Stage $existingStage */
$existingStage = $existingStages->get($s['id']);
// Restore soft-deleted stages that are now active in HubSpot
if ($existingStage?->trashed() && $s['active']) {
$existingStage->restore();
}
// Upsert stage (updates soft-deleted records without restoring them)
$stage = $this->config->stages()->withTrashed()->updateOrCreate([
'crm_provider_id' => $s['id'],
], [
'team_id' => $this->team->id,
'name' => mb_strimwidth($s['label'], 0, 50),
'label' => mb_strimwidth($s['label'], 0, 191),
'type' => Stage::TYPE_OPPORTUNITY,
'sequence' => $s['displayOrder'],
'is_selectable' => $s['active'],
'probability' => $s['probability'] * 100,
]);
if ($missingStageName === $s['id']) {
$missingStage = $stage;
}
$stages[] = $stage->id;
}
$businessProcess->stages()->sync($stages);
}
return $missingStage;
}
/**
* @inheritdoc
*/
public function syncOrganization(): void
{
try {
$endpoint = '[URL_WITH_CREDENTIALS]
*/
public function find(string $name, array $scopes): array
{
$count = $this->limit ?? 20;
$offset = $this->offset ?? 0;
/** @var array<int, array<string, mixed>> */
return Cache::remember(
key: $this->team->getId() . $name . $count . $offset,
ttl: 300,
callback: function () use ($name, $offset, $count): array {
$data = [];
// Use the new V3 API to find contacts based on additional fields.
foreach (['companies', 'contacts'] as $objectType) {
$payload = $this->generateNameSearchPayload($name, $offset, $count);
$type = $objectType === 'companies' ? 'account' : 'contact';
try {
$response = $this->client->search($objectType, $payload);
// Build mapped list.
foreach ($response['results'] as $object) {
$properties = $object['properties'];
$objectName = $this->buildContactName($properties);
$record = [
'crmId' => $object['id'],
// Pass crmUrl to the FE, needed for success message in the extension when you log activity.
'crmUrl' => $this->generateProviderUrl($object['id'], $type),
'name' => $objectName,
'prospectType' => $type,
'phoneNumbers' => [],
];
if ($type === 'account') {
$record['industry'] = $properties['industry'] ?? null;
} else {
$record['title'] = $properties['jobtitle'] ?? null;
$record['organization'] = $properties['company'] ?? null;
}
$countryCode = $this->buildContactCountry($properties);
$parsedNumber = $this->buildContactPhone($countryCode, $properties);
// Add phone number to record.
if (! empty($parsedNumber['phone'])) {
$record['phoneNumbers'][] = [
'number' => $parsedNumber['phone'],
'nationalFormat' => phone_national($countryCode, $parsedNumber['phone']),
'type' => 'phone',
];
}
// Add mobile phone number to record.
if (! empty($properties['mobilephone'])) {
$mobileNumber = phone_e164($countryCode, $properties['mobilephone']);
if ($mobileNumber !== null) {
$record['phoneNumbers'][] = [
'number' => $mobileNumber,
'nationalFormat' => phone_national($countryCode, $mobileNumber),
'type' => 'mobile',
];
}
}
$data[] = $record;
}
} catch (BadRequest $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [
'teamId' => $this->team->getUuid(),
'request' => $payload,
'reason' => $e->getMessage(),
]);
throw $e;
}
}
return $data;
},
);
}
/**
* @inheritdoc
*/
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$ownerId = null;
if ($crmAccountId === null) {
return $data;
}
if ($userId) {
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
$ownerId = $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
$closedStages = $this->getClosedDealStages();
$payload = $this->payloadBuilder->generateOpportunitiesSearchPayload(
$this->config,
$crmAccountId,
$closedStages,
);
$results = $this->client->getPaginatedData($payload, 'deals');
foreach ($results['results'] as $object) {
$properties = $object['properties'];
$amount = null;
if (empty($properties['amount']) === false) {
$currency = $properties['deal_currency_code'] ?? $this->config->default_currency;
// Values can contain commas and any junk so strip them.
$value = (float) preg_replace('/[^\d.]/', '', $properties['amount']);
$amount = formatCurrency($value, $currency);
}
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
if ($businessProcess === null) {
// Import it.
$stage = $this->importStages([Stage::TYPE_OPPORTUNITY], $properties['dealstage']);
$businessProcess = $this->config
->businessProcesses()
->where('crm_provider_id', $properties['pipeline'])
->first();
} else {
$stage = $businessProcess
->stages()
->where('crm_provider_id', $properties['dealstage'])
->where('type', Stage::TYPE_OPPORTUNITY)
->first();
if ($stage === null) {
// Import it.
$stage = $this->importStages(null, $properties['dealstage']);
}
}
$recordType = null;
if ($businessProcess) {
$recordType = $businessProcess->recordTypes()->first();
}
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$record = [
'crmId' => $object['id'],
'name' => $properties['dealname'] ?? 'Unknown Deal',
'value' => $amount,
'won' => $isWon,
'closed' => $isWon || $isLost,
'stage' => [
'id' => $stage?->getUuid() ?? '',
'name' => $stage?->getName() ?? '',
],
];
if ($recordType) {
$record += [
'recordType' => [
'id' => $recordType->id_string,
'name' => $recordType->name,
],
];
}
if ($ownerId && isset($properties['hubspot_owner_id']) && $properties['hubspot_owner_id'] === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
}
/**
* @inheritdoc
*/
public function getTasks(?string $objectType, string $objectId, ?string $opportunityId): array
{
$data = [];
switch ($objectType) {
case 'contact':
$hsObject = 'contact';
break;
case 'account':
$hsObject = 'company';
break;
default:
// This is a hack to prioritise and override a contact/company with a deal.
if ($opportunityId) {
$hsObject = 'deal';
$objectId = $opportunityId;
} else {
throw new InvalidArgumentException('Object type not supported.');
}
}
$engagementTypes = ['meetings', 'tasks'];
foreach ($engagementTypes as $engagementType) {
$payload = $this->payloadBuilder->getLinkToTaskPayload($hsObject, $objectId, $engagementType);
$this->logger->info('[HubSpot] CRM Search requested', [
'request' => $payload,
]);
$engagements = $this->client->getPaginatedData($payload, $engagementType);
foreach ($engagements['results'] as $engagement) {
if ($engagementType == 'meetings') {
$title = $engagement['properties']['hs_meeting_title'] ?? 'Scheduled meeting';
} elseif ($engagementType == 'tasks') {
$title = $engagement['properties']['hs_task_subject'];
} else {
$title = 'Scheduled meeting';
}
$data[] = [
'crmId' => $engagement['id'],
'subject' => $title,
'due' => $engagement['properties']['hs_timestamp'],
'type' => $engagement['properties']['hs_activity_type'] ?? null,
];
}
}
usort($data, function ($item1, $item2) {
return $item2['due'] <=> $item1['due'];
});
return $data;
}
/**
* Try to find CRM Objects using email address
*
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchExactlyByEmail(string $email, ?int $userId = null): ?array
{
$contactProperties = [
'email',
'firstname',
'lastname',
'country',
'phone',
'mobilephone',
'jobtitle',
'hubspot_owner_id',
'associatedcompanyid',
'photo',
];
$contact = null;
$account = null;
try {
$hsContact = $this->getClient()->getContactByEmail($email, $contactProperties);
if ($hsContact) {
$contact = $this->importContact($hsContact);
$account = $contact->account;
}
$data = $this->convertCrmData($contact, $account, $userId);
return ! empty(array_filter($data)) ? $data : null;
} catch (BadRequest $e) {
$this->logger->warning('[HubSpot] Search failed', [
'team_id' => $this->team->getId(),
'search_identifier' => $email,
'reason' => $e->getMessage(),
]);
}
return null;
}
public function getDomain(string $email): ?string
{
return $this->getDomainFromEmail($email);
}
/**
* Try to find CRM objects using domain name of the email address
*
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchByDomain(string $domain, ?int $userId = null): ?array
{
$companyName = $domain;
// Try to find a company matching their email domain.
$companyProperties = [
'country',
'phone',
'name',
'hs_avatar_filemanager_key',
'industry',
'hubspot_owner_id',
'domain',
];
try {
$hsAccounts = $this->client
->getInstance()
->companies()
->searchByDomain($companyName, $companyProperties);
} catch (Throwable $e) {
$this->logger->info('[HubSpot] Search failed', [
'error' => $e->getMessage(),
'domain' => $domain,
]);
return null;
}
$account = null;
// If there are multiple accounts, don't guess, we'll ask later.
if (\count($hsAccounts->data->results) === 1) {
// Persist this remote object.
$account = $this->syncAccount($hsAccounts->data->results[0]->companyId);
}
$data = $this->convertCrmData(null, $account, $userId);
return ! empty(array_filter($data)) ? $data : null;
}
/**
* @return array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
protected function convertCrmData(?Contact $contact, ?Account $account, ?int $userId = null): array
{
$countryCode = null;
if ($contact && $contact->country_code) {
$countryCode = $contact->country_code;
} elseif ($account && $account->country_code) {
$countryCode = $account->country_code;
}
try {
$hsOpportunities = $this->findOpportunities(
$account ? $account->crm_provider_id : null,
$contact ? $contact->crm_provider_id : null,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
// If there are multiple opportunities, don't guess, we'll ask later.
$opportunity = null;
$stage = null;
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
}
protected function getCacheKey(string $object, ?int $userId = null): ?string
{
$key = $this->team->getId() . $object;
$keySuffix = $this->getOwnerKeySuffix($userId);
return $key . $keySuffix;
}
private function getOwnerKeySuffix(?int $userId = null): string
{
return $userId === null ? '' : (string) $userId;
}
/**
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
*}
*/
public function matchByPhone(string $phone, ?string $rawPhoneNumber = null, ?int $userId = null): ?array
{
if (str_contains($phone, '**')) {
return null;
}
// trim all whitespaces if present so the lookup doesn't fail
$phone = str_replace(' ', '', $phone);
// Check if the user is internal.
if ($this->isPhoneNumberOfTeamMember($phone)) {
return null;
}
$response = $this->searchForPhoneNumber($phone);
if (empty($response)) {
return null;
}
// This would ideally importContact instead but the response type differs.
$contact = $this->findAndSyncContact($response['results'][0]['id']);
if (! $contact instanceof Contact) {
return null;
}
$account = $contact->account;
$countryCode = $contact->country_code ?? $account->country_code ?? null;
try {
$hsOpportunities = $this->findOpportunities(
$account?->crm_provider_id,
$contact->crm_provider_id,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
$opportunity = null;
$stage = null;
try {
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
} catch (Exception $e) {
$this->logger->debug('[HubSpot] Opportunity failed to sync.', [
'reason' => $e->getMessage(),
]);
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
}
private function isPhoneNumberOfTeamMember(string $phone): bool
{
$teamRepository = app(TeamRepository::class);
$user = $teamRepository->findTeamMemberByPhone($this->team, $phone);
if ($user instanceof User) {
return true;
}
return false;
}
private function findAndSyncContact(string $crmId): ?Contact
{
try {
return $this->syncContact($crmId);
} catch (Exception $exception) {
$this->logger->info('[HubSpot] Phone match failed', [
'reason' => $exception->getMessage(),
]);
return null;
}
}
private function hasResults(array $response): bool
{
return isset($response['total']) && is_numeric($response['total']) && $response['total'] > 0;
}
private function searchForPhoneNumber(string $phone): array
{
// Normalizes the provided phone number for the API search.
$normalizedPhone = $this->normalizePhoneNumber($phone);
$payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone);
$this->logger->info('[HubSpot] Phone match search triggered', [
'phone' => $phone,
'normalizedPhone' => $normalizedPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($normalizedPhone, $payload);
if (! $this->hasResults($response)) {
$nationalPhone = preg_replace('/\D/', '', phone_national(null, $phone));
$payload = $this->payloadBuilder->generatePhoneSearchPayload($nationalPhone);
$this->logger->info('[HubSpot] Phone match national number search triggered', [
'phone' => $phone,
'nationalPhone' => $nationalPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($phone, $payload);
}
if (! $this->hasResults($response)) {
$payload = $this->payloadBuilder->generatePhoneSearchPayload($normalizedPhone, true);
$this->logger->info('[HubSpot] Phone match alternative search triggered', [
'phone' => $phone,
'normalizedPhone' => $normalizedPhone,
'payload' => $payload,
]);
$response = $this->handlePhoneSearchRequest($phone, $payload);
}
return $this->hasResults($response) ? $response : [];
}
private function handlePhoneSearchRequest(string $phone, array $payload): array
{
try {
return $this->client->search('contacts', $payload);
} catch (Exception $exception) {
$this->logger->info('[HubSpot] Phone match failed', [
'phone' => $phone,
'reason' => $exception->getMessage(),
]);
return [];
}
}
private function normalizePhoneNumber(string $phone): string
{
return ltrim(phone_e164(null, $phone), '+0');
}
/**
* @return null|array{
* Lead|null,
* Account|null,
* Opportunity|null,
* Contact|null,
* Stage|null,
* string|null
* }
*/
public function matchByName(string $name, ?int $userId = null): ?array
{
// Don't waste time searching for single character strings.
if (\strlen($name) <= 1) {
return null;
}
$cacheKey = $this->getCacheKey($name, $userId);
$result = Cache::remember($cacheKey, 60, function () use ($name, $userId) {
$payload = $this->payloadBuilder->generateSearchContactsByNamePayload(
$name,
$this->getContactFields()
);
$hsContacts = $this->client->getPaginatedData($payload, 'contact');
if (empty($hsContacts['results'])) {
return false;
}
$contact = $this->importContact($hsContacts['results'][0]);
if ($contact === null) {
return false;
}
$account = $contact->account;
$countryCode = $contact->country_code ?? $account->country_code ?? null;
try {
$hsOpportunities = $this->findOpportunities(
$account ? $account->crm_provider_id : null,
$contact->crm_provider_id,
$userId
);
} catch (Exception $e) {
$hsOpportunities = [];
}
$opportunity = null;
$stage = null;
if (! empty($hsOpportunities)) {
// Persist this remote object.
$opportunity = $this->syncOpportunity($hsOpportunities[0]['crmId']);
$stage = $opportunity?->getStage();
}
return [
null,
$account,
$opportunity,
$contact,
$stage,
$countryCode,
];
});
return is_array($result) ? $result : null;
}
private function convertActivityAssociations(Activity $activity): array
{
return [
'contactIds' => $this->getParticipantsIds($activity),
'companyIds' => $activity->hasAccount() ? [$activity->account->crm_provider_id] : [],
'dealIds' => $activity->hasOpportunity() ? [$activity->opportunity->crm_provider_id] : [],
'ownerIds' => [],
];
}
private function getParticipantsIds(Activity $activity): array
{
$attendees = [];
$participantRepository = app(ParticipantRepository::class);
$participants = $participantRepository->getParticipantsWhoEnteredMeeting($activity);
foreach ($participants as $participant) {
if ($participant->user_id || $participant->isCoach()) {
continue;
}
$contact = $participant->contact()->first();
if ($contact && $contact->crm_provider_id) {
$attendees[] = $contact->crm_provider_id;
} else {
if (! empty($participant->name)) {
$attendeeData = $this->fetchMissingAttendeeInfo($participant);
}
if (! empty($attendeeData['id'])) {
$attendees[] = $attendeeData['id'];
}
}
}
if ($activity->hasContact()) {
$attendees[] = $activity->contact->crm_provider_id;
}
return array_unique($attendees);
}
private function fetchMissingAttendeeInfo(Participant $participant): array
{
// Check if we need to look inside an account context.
$activity = $participant->getActivity();
$companyId = $activity->hasAccount() ? $activity->getAccount()->crm_provider_id : null;
// First check the local data.
/** @var Contact[] $contacts */
$contacts = $this->team->contacts()
->with('account')
->where('name', $participant->name)
->whereNotNull('email')
->get();
foreach ($contacts as $contact) {
// If we have a company in scope, check the contact is associated to it.
if (
$companyId !== null
&& ($contact->account_id === null || $companyId !== $contact->account->crm_provider_id)
) {
continue;
}
return [
'id' => $contact->crm_provider_id,
'email' => $contact->email,
];
}
$payload = $this->generateNameSearchPayload($participant->name, 0, 20);
try {
$response = $this->client->getNewInstance()->crm()->contacts()->searchApi()->doSearch($payload);
// TODO add some logic to choose the most suitable contact if multiple
foreach ($response['results'] as $object) {
$properties = $object['properties'];
if (empty($object['properties']) === false) {
// Check the company matches the contact.
// Todo: Move this check inside the API search.
if ($companyId !== null && $companyId !== $properties['associatedcompanyid']) {
continue;
}
return [
'id' => $object['id'],
'email' => $properties['email'],
];
}
}
} catch (Exception $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Search failed', [
'teamId' => $this->team->id_string,
'request' => $payload,
'reason' => $e->getMessage(),
]);
}
return [];
}
/**
* Store transcripts as note engagement.
*
* @throws Exception
*/
public function createTranscriptNotes(Activity $activity): void
{
// For HS no need to check if Crm profile - Log Notes field is enabled
// We only check if store_transcript toggle is enabled on crm profile.
$engagement = [
'active' => true,
'ownerId' => $this->profile->crm_provider_id,
'timestamp' => $activity->created_at->tz($activity->user->timezone)->getTimestamp() * 1000,
'type' => 'NOTE',
];
// Generate activity transcription.
$transcriptionData = $this->generateTranscription($activity);
// Truncate Notes with max notes length because transcription text could be very long.
$transcripts = mb_strimwidth($transcriptionData, 0, static::ENGAGEMENT_BODY_MAX_LENGTH);
$metadata = [
'body' => $transcripts,
];
$associations = $this->convertActivityAssociations($activity);
try {
$hsEngagement = $this->client
->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
$this->logCrmEngagementManipulation(self::ACTION_CREATE, $engagement, $metadata, $associations);
$noteId = $hsEngagement->data->engagement->id;
// Store crm logged id in transcription.
$transcription = $activity->getTranscription();
$transcription->crm_activity_id = $noteId;
$transcription->save();
} catch (Exception $e) {
Sentry::captureException($e);
}
}
/*
* @inheritdoc
*/
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$payload = [
'properties' => $data,
];
try {
switch ($objectType) {
case FieldData::OBJECT_OPPORTUNITY:
$this->client->getNewInstance()->crm()->deals()->basicApi()->update($objectId, $payload);
break;
case FieldData::OBJECT_CONTACT:
$this->client->getNewInstance()->crm()->contacts()->basicApi()->update($objectId, $payload);
break;
case FieldData::OBJECT_ACCOUNT:
$this->client->getNewInstance()->crm()->companies()->basicApi()->update($objectId, $payload);
break;
case FieldData::OBJECT_TASK:
// Endpoint for Engagements not ready
$engagements = [
'type' => 'TASK',
];
$metadata = $data;
$this->client->getInstance()->engagements()->update($objectId, $engagements, $metadata);
$this->logCrmEngagementManipulation(
self::ACTION_UPDATE,
['crmId' => $objectId],
$metadata,
);
break;
default:
throw new UnexpectedValueException('Unsupported object type "' . $objectType . '"');
}
} catch (\HubSpot\Client\Crm\Deals\ApiException $apiException) {
$errorMessage = $apiException->getMessage();
if ($apiException->getResponseBody()) {
$responseBody = json_decode($apiException->getResponseBody(), true, 512, JSON_THROW_ON_ERROR);
$errorMessage = $responseBody['message'] ?? $apiException->getMessage();
}
$this->logger->error(
'[HubSpot] Update record failed',
[
'objectType' => $objectType,
'objectId' => $objectId,
'payload' => $payload,
'reason' => $errorMessage,
'team' => $this->team->getUuid(),
]
);
throw new CrmException($errorMessage);
}
}
/*
* @inheritdoc
*/
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
switch ($objectType) {
case FieldData::OBJECT_OPPORTUNITY:
return $this->client->getInstance()->deals()->getById($objectId)->toArray();
case FieldData::OBJECT_CONTACT:
return $this->client->getInstance()->contacts()->getById($objectId)->toArray();
case FieldData::OBJECT_ACCOUNT:
return $this->cli...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
15028
|
673
|
34
|
2026-05-11T06:10:15.388679+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778479815388_m2.jpg...
|
PhpStorm
|
faVsco.js – MatchActivityCrmData.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavicareCodeFV faVsco.js°9 JY-20725-h PhostormVIewINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-linProiectC) HubsootPaginationService.ongCrmObiects© HubspotSyncStrategyBase.phpCachedcrmservicebecorator.onp• DecorateActivityn Dummy>• Helpers© MatchActivityCrmData.php© ermactivilyservice.phgv HubspotAccountSyncStrate>@ Actionsclass Service extends Baseservice 1mplementsb contactsyncstrate•DDIe• U rielas• W Journa.Metadatav Opporunilvsyncsru Concerns(C) HubspotlastMo(C) HubspotlastMo© HubspotLastMo(C) HuospotlastMo(c) -uosootLastмo(C) -uospotsindlesC. HubsnotSvncStr(C) HubsnotWebhor• M PadinationiC) HubsootPadinat(c) PadinationConfi(c) DadinationStatem ProcnectSoarchStr• m Pedic• M ServiceTraitsT. OpportunitysyncT SyncCrmEntitiesT CuneCioldeTiraitWriteCrmtrait.o> O Utils> 0 Webhook|c) Batchsynccollectolc) BatchSyncRedisSerc) Client.phpC) ClosedDealStagess@ DealFieldsService.rC) DecorateActivtv.oncFieldDerinitions.onvC) FieldivoeConverte1) HubsootclientintenC) Hubsoot TokenMan.© PayloadBuilder.phpC) RemoteCrm@biect.9) ResnonceNormalizeC) Service nhn* dreturn nulularrousLeadinuleAccountlnulz.Opportunitylnull,ContactlnulaStage|null,strinalnulpublic function matchByDomain(string $domain, ?int $userId = null): ?array$companyName = $domain;// Try to find a company matching their email domain.ScompanyProperties = [countryInhone'""name"'hs avatar filemanager_key'ShsAccounts = sthis->cuient->aetinstanceol->comoanieso->search?vlomainScomnanvName. Scomnanv?ronerties):catch uthrowable se) *Sthis->loagen->info/'HubSnot Search failed'"ennont => Se->aetMessaaeolI"domain' => Sdomaininotunn null.Caccount = null.I/ If there are multiple accounts, don't quess, we'll ask laterif (|count(ShsAccounts->data-›results) === 1) {I/ Persist this remote obiect.@ SvncField Action nhSaccount = $this->syncAccount(ShsAccounts->data->results[0]->companyId) =(C) SvncRelatedActivit.olner Code will hoin INF to underctand vour Laravel ann code II Generate I| Don't Show Anvmore (a minute aao)© ProspectCache.phpm 47 A48 ×1 ×33 21 лA SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKob.# console leu)# console [slAGiNg)[2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {"neaders".?"Uace":L"Inu,or May 2020 14.21.15 6Ml"Jn"Transter-Encod1nq":"chunked")"Connection":"keep-alive""CF-Ray" : ["9f80deb8db60dc3a-SOF"],"Strict-Transport-Security":["max-aqe=31536000: includeSubDomains: preload"].accent-encodino""access-control-allow-credentials": ["false"]."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\","x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],"So+-Cookie"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"),"Renont-To".r"*"endnoints"."unl".httns:a.nel.cloudflane.com./nenon+|W/v42c=NVA1cVTPQfVm32anS0ixVF/sd2RI"group\":\"cf-nel\","max_age\":604800}"]|"NEL":["{\"success_fraction\":0.01,"report to":|"cf-nel\"."max age":604800}"]"Server": ["cloudflare"]}} {"correlation_ 10":"95256555-ec98-4541-b9za-adta/Sboyeab"."trace_10":C/AD8565-905t-4604-9405-0e5b551e5545"CascadeNew CascadeS0 l ODally - Platrorm • In 3om100% Lz. Mon 11 May 9:10:15AskJiminnyReportActivityServiceTest+0 ..Cascade Code x• .Kick off a new project. Make changesacross your entre codeoase.nciloe•Service.phpMakefileREADME.md• INSTALL.mclicenses.md"ohouReview @HubsootPaqinationService.ono @MatchActivitvormdata.ono @Service,ono @fileC° Adantive0 +]WN Windsurf Teams008•62 UITF.Rio 4 spaces...
|
NULL
|
6212345536639484687
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavicareCodeFV faVsco.js°9 JY-20725-h PhostormVIewINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-linProiectC) HubsootPaginationService.ongCrmObiects© HubspotSyncStrategyBase.phpCachedcrmservicebecorator.onp• DecorateActivityn Dummy>• Helpers© MatchActivityCrmData.php© ermactivilyservice.phgv HubspotAccountSyncStrate>@ Actionsclass Service extends Baseservice 1mplementsb contactsyncstrate•DDIe• U rielas• W Journa.Metadatav Opporunilvsyncsru Concerns(C) HubspotlastMo(C) HubspotlastMo© HubspotLastMo(C) HuospotlastMo(c) -uosootLastмo(C) -uospotsindlesC. HubsnotSvncStr(C) HubsnotWebhor• M PadinationiC) HubsootPadinat(c) PadinationConfi(c) DadinationStatem ProcnectSoarchStr• m Pedic• M ServiceTraitsT. OpportunitysyncT SyncCrmEntitiesT CuneCioldeTiraitWriteCrmtrait.o> O Utils> 0 Webhook|c) Batchsynccollectolc) BatchSyncRedisSerc) Client.phpC) ClosedDealStagess@ DealFieldsService.rC) DecorateActivtv.oncFieldDerinitions.onvC) FieldivoeConverte1) HubsootclientintenC) Hubsoot TokenMan.© PayloadBuilder.phpC) RemoteCrm@biect.9) ResnonceNormalizeC) Service nhn* dreturn nulularrousLeadinuleAccountlnulz.Opportunitylnull,ContactlnulaStage|null,strinalnulpublic function matchByDomain(string $domain, ?int $userId = null): ?array$companyName = $domain;// Try to find a company matching their email domain.ScompanyProperties = [countryInhone'""name"'hs avatar filemanager_key'ShsAccounts = sthis->cuient->aetinstanceol->comoanieso->search?vlomainScomnanvName. Scomnanv?ronerties):catch uthrowable se) *Sthis->loagen->info/'HubSnot Search failed'"ennont => Se->aetMessaaeolI"domain' => Sdomaininotunn null.Caccount = null.I/ If there are multiple accounts, don't quess, we'll ask laterif (|count(ShsAccounts->data-›results) === 1) {I/ Persist this remote obiect.@ SvncField Action nhSaccount = $this->syncAccount(ShsAccounts->data->results[0]->companyId) =(C) SvncRelatedActivit.olner Code will hoin INF to underctand vour Laravel ann code II Generate I| Don't Show Anvmore (a minute aao)© ProspectCache.phpm 47 A48 ×1 ×33 21 лA SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKob.# console leu)# console [slAGiNg)[2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {"neaders".?"Uace":L"Inu,or May 2020 14.21.15 6Ml"Jn"Transter-Encod1nq":"chunked")"Connection":"keep-alive""CF-Ray" : ["9f80deb8db60dc3a-SOF"],"Strict-Transport-Security":["max-aqe=31536000: includeSubDomains: preload"].accent-encodino""access-control-allow-credentials": ["false"]."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\","x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],"So+-Cookie"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"),"Renont-To".r"*"endnoints"."unl".httns:a.nel.cloudflane.com./nenon+|W/v42c=NVA1cVTPQfVm32anS0ixVF/sd2RI"group\":\"cf-nel\","max_age\":604800}"]|"NEL":["{\"success_fraction\":0.01,"report to":|"cf-nel\"."max age":604800}"]"Server": ["cloudflare"]}} {"correlation_ 10":"95256555-ec98-4541-b9za-adta/Sboyeab"."trace_10":C/AD8565-905t-4604-9405-0e5b551e5545"CascadeNew CascadeS0 l ODally - Platrorm • In 3om100% Lz. Mon 11 May 9:10:15AskJiminnyReportActivityServiceTest+0 ..Cascade Code x• .Kick off a new project. Make changesacross your entre codeoase.nciloe•Service.phpMakefileREADME.md• INSTALL.mclicenses.md"ohouReview @HubsootPaqinationService.ono @MatchActivitvormdata.ono @Service,ono @fileC° Adantive0 +]WN Windsurf Teams008•62 UITF.Rio 4 spaces...
|
15026
|
NULL
|
NULL
|
NULL
|
|
15208
|
679
|
34
|
2026-05-11T06:27:32.884137+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778480852884_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
True
|
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
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
1
Previous Highlighted Error
Next Highlighted Error...
|
[{"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.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.36535904,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"65","depth":4,"bounds":{"left":0.37533244,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.38763297,"top":0.17478053,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.39660904,"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.4039229,"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}]...
|
8737268205022726529
|
-8672805837691737150
|
visual_change
|
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
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
1
Previous Highlighted Error
Next Highlighted Error
PhostormINavicareCodeFV faVsco.jsroledeyU Concerns(c) HuosporLastmo© HubspotLastMor© HubspotSyncStrategyBase.phpCachedcrmservicebecorator.pnp© SyncRelatedActivityManager.php© ProspectCache.php© ermactivilyservice.phg© HubspotLastMor(C) HubspotLastMo© HubspotSingleS:© HubspotSyncStr© HubspotWebhocv D Pagination© HubspotPaginati© PaginationConfig© PaginationState.> D ProspectSearchStr:› D Redisv D Service Traits* OpportunitySync* SyncCrmEntitiesu syncrields Irait.© WriteCrmTrait.pl•D Utils_ webnookc) Barchsvnccollectolc) Batchsvncredisserclass Client extends BaseClient implements HubspotClientInterfaceououc tunction ferchioportunitv-leldiptonscsleld stleld: arrav=| A2 A65 X1 A Yreturn sthis-›fetchPropertyuptions obiectlype: 'deals', Stield->qetcrmProvideridoo:E18* @throws BadRequest* athrows HubspotExcention=24public function makeRequest(string $endpoint, $method = 'GET' , $payload = [], ?string $queryString = null) 25Sendpoint = self::BASE_URL $endpoint;if ($method === 'GET') €return $this->getInstance()->getClient()?->request(method. snethodenapolnt. senapolnt,query_string: $queryStringC) ClosedDea StagessDeaFieldsService.rFelse {return $this->getInstance()->getClient()->request($method, $endpoint, [Log xChanges 12 files= env.local aon© Client.php app/Services/Crm/Hubspot© HandleHubspotRateLimit.php app/Jobs/Middleware© HubspotClientinterface.php app/Services/Crm/Hubspot© HubspotPaginationService.php app/Services/Crm/Hubspot/Pagination©JiminnyDebugCommand.php app/Console/Commandsphe logging.php config©MatchActivityCrmData.php app/Jobs/Crm© MatchCrmData.php app/Jobs/Activity/lmport© PaginationState.php app/Services/Crm/Hubspot/Pagination© RateLimitException.php app/Exceptions© Service.php app/Services/Crm/Hubspot~ Unversioned Files 9 files= env.nikilocal apoE.env.other app© CanAccessAiReportsTest.php tests/Unit/Policies© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/Repki tavicon.ico publicEids.txt appiaraw sol querv sall aoolosimuev ehookscon mand php rar/console/Comands/Crm/Hubspotelper Code will help IDE to understand your Laravel app code. // Generate // Don't Show Anymore (19 minutes ago)T + 0+ → Side-by-side viewer -Do not ignore8 35f036ac app/Services/Crm/lSocialAccountService $socialAccountService,HubspotPaginationService $paginationService,Highight words -X 1 ?parent: :_construct($socialAccountService);$this->paginationService = $paginationService;Sthis->tokenManager = StokenManager:Sthis->setBaseUrl(self::BASE_URL);Sthis->setVersion(self::MIN_API_VERSION);public function getMinimumApiVersion(): stringreturn self::MINAPTVERSTON:$lastRecordIdDally - Platrorm • In 1om100% Lz&• Mon 11 May 9:27:32U AskJiminnyReportActivityServiceTest~+0 ..E laravel.log# console [PKob.A console (EU]A SF jiminny@localhost]A console (STAGING]A HS_Jocal (jiminny@localhost]accept-encoding"],MMi9 AY"access-control-allow-credentials": ["false"],"server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3)",cfr;desc=\"9f80deb8e7c6dc3a-IAD)""],"x-content-type-options": ["nosniff"],"x-hubspot-correlation-id" :["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],"ser-Lookle:ct.dm=sLurcaugxvrzksopacronzvyknzinubzavrabeccmoy-1//81050/5-1.0.207-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],"керогс-10":"1enapolnus"."url":nccos:a.nel.cloudtlare.comredorcv4?s=NYALsVIPorymszorsunxy24S0zk("group)":\"cf-nel\","max_age\":6048005"J,"NEL": ["{"success fraction":0.01.\"report_tol":\"cf-nell","max ade".604800-""Server": ["cloudflare"]}}{"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab","trace id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}Current versionCascadeHubspot Rate Limit Re9. MatchcrmData rate limiter move is logically correct but asymmetric with the quardMatchCrmData.oho:103-11kif (! $rateLimiter-->canMakeRequest(Sactivity->getCmO))) €sthis->release(..)return;ScrmObjects = $crm0bjectsResolver->resolveFromCall(...):SrateLimiter→>incrementRequestCount(Sactivity->getCrm0));Movina increnent:RequestCount to after resolveFromCall is correct — previouslv it counted the attemot even if the call failed. However. resolveFronCall canmake muitiple CRM API calls (email match + phone match + domain match). The rate limiter counts this whole resolver as 1 request. If a preventive rate limiter wereadded inside Client, the ProviderRatelimiter at the job level would count "1 request" while the client made 3 calls — so the two counters would diverge and thepreventive limiter would still be meaninaful independentlv.Rate Limit counter Interaction — vatchcrnbata vs Cllent-Side Preventive LimitThe question about how the ProviderRateLimiter would interact with a preventive client-side rate limit:Current flow (MatchdrmData:1. canMakeRequestlo checks the Laravel cache-oased counter + 1ob-level, coarse-arained, oer-cRM-contic2. resolveFromCall() makes 2-3 actual HubSpot API calls3. incrementReguestCount() adds 1 to the counterIf a preventive rate limit were added in Client (e.g. before search()):Ask anything (2AL)+ <> CodeSAdaptive6 differencesSocialAccountService $socialAccountService,Huhcnot PaninationSenvice CnaginationSenvicoHubspotTokenManager $tokenManager,parent::__construct($socialAccountService);$this-›paginationService = $paginationService;Sthis->tokenManager = StokenManager:Sthis->setBaseUrl(self::BASE_URL);Sthis->setVersion(self::MIN_API_VERSION);* Reacts to a rate limits (429) from HubSpot by translating it* into a RatelamtExcention carruina retru after.* Wrap any outbound HubSpot call (SDK or raw HTTP) Like:Sthis-›executeRequest(fn () => $this-›getNewInstance() -›crm()-›...);WN Windsurf Toams 712-10|UTE.8f?4 spaces...
|
15206
|
NULL
|
NULL
|
NULL
|
|
15369
|
687
|
34
|
2026-05-11T06:46:49.821952+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778482009821_m2.jpg...
|
Firefox
|
Meet - Daily - Platform — Work
|
True
|
meet.google.com/mie-gawc-dsi?authuser=lukas.kovali meet.google.com/mie-gawc-dsi?authuser=lukas.kovalik@jiminny.com...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Meet - Daily - Platform
Mute tab
M New Tab
New Tab
Meet - Daily - Platform
Mute tab
Meet - Daily - Platform
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Nikolay Yankov (Presenting, annotating)
Nikolay Yankov (Presenting, annotating)
People
9
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Stefka Stoyanova
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Yankov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Galya Dimitrova
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Steliyan Georgiev
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Aneliya Angelova
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Ivanov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things....
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.2237367,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.23703457,"top":0.06304868,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Meet - Daily - Platform","depth":4,"bounds":{"left":0.2237367,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Mute tab","depth":5,"bounds":{"left":0.23520611,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Meet - Daily - Platform","depth":5,"bounds":{"left":0.24384974,"top":0.09577015,"width":0.039727394,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.29105717,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.2265625,"top":0.118914604,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.2265625,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.23753324,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.2486702,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.25980717,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.27094415,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Nikolay Yankov (Presenting, annotating)","depth":12,"bounds":{"left":0.32330453,"top":0.0726257,"width":0.08510638,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov (Presenting, annotating)","depth":13,"bounds":{"left":0.32330453,"top":0.07342378,"width":0.08510638,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.94581115,"top":0.06424581,"width":0.019614361,"height":0.028731046},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"9","depth":22,"bounds":{"left":0.95910907,"top":0.0726257,"width":0.0023271276,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.9680851,"top":0.06424581,"width":0.011968086,"height":0.028731046},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.9694149,"top":0.0726257,"width":0.03058511,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini","depth":17,"bounds":{"left":0.9840425,"top":0.0726257,"width":0.013464096,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Gemini","depth":17,"bounds":{"left":0.9830452,"top":0.0650439,"width":0.011303191,"height":0.027134877},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.7357048,"top":0.6249002,"width":0.07014628,"height":0.06384677},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.8046875,"top":0.63527536,"width":0.03873005,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.7940492,"top":0.63248205,"width":0.053025264,"height":0.040702313},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zoom in","depth":13,"bounds":{"left":0.76047206,"top":0.8188348,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open in new window","depth":13,"bounds":{"left":0.77642953,"top":0.8188348,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Enter Full Screen","depth":13,"bounds":{"left":0.79238695,"top":0.8188348,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.8557181,"top":0.21548285,"width":0.07014628,"height":0.040702313},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.92370343,"top":0.22625698,"width":0.036236703,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.91306514,"top":0.22306465,"width":0.05618351,"height":0.032322425},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":17,"bounds":{"left":0.81798536,"top":0.28451717,"width":0.042220745,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.94980055,"top":0.21548285,"width":0.05019945,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":1.0,"top":0.22625698,"width":-0.018783212,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":1.0,"top":0.22306465,"width":-0.008144975,"height":0.032322425},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":17,"bounds":{"left":0.91007316,"top":0.28451717,"width":0.03673537,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.8540558,"top":0.424581,"width":0.07014628,"height":0.040702313},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.92303854,"top":0.43535516,"width":0.036236703,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.91240025,"top":0.43216282,"width":0.05618351,"height":0.032322425},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":17,"bounds":{"left":0.81798536,"top":0.49361533,"width":0.039228722,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.94980055,"top":0.424581,"width":0.05019945,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":1.0,"top":0.43535516,"width":-0.018783212,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":1.0,"top":0.43216282,"width":-0.008144975,"height":0.032322425},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":17,"bounds":{"left":0.91007316,"top":0.49361533,"width":0.04338431,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.83543885,"top":0.63367915,"width":0.07014628,"height":0.040702313},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.90442157,"top":0.6444533,"width":0.036236703,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.8937833,"top":0.641261,"width":0.05618351,"height":0.032322425},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":17,"bounds":{"left":0.795379,"top":0.7027135,"width":0.042386968,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.9271942,"top":0.63367915,"width":0.07014628,"height":0.040702313},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.99617684,"top":0.6444533,"width":0.0038231611,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.98553854,"top":0.641261,"width":0.014461458,"height":0.032322425},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":17,"bounds":{"left":0.8874667,"top":0.7027135,"width":0.035405584,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":17,"bounds":{"left":0.795379,"top":0.91181165,"width":0.03756649,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":1.0,"top":0.8427773,"width":-0.013630271,"height":0.05546688},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.97855717,"top":0.85355145,"width":0.02144283,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.96924865,"top":0.85035914,"width":0.030751348,"height":0.032322425},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-4942937880681649147
|
-6605681976617501892
|
click
|
accessibility
|
NULL
|
New Tab
New Tab
Meet - Daily - Platform
Mute tab
M New Tab
New Tab
Meet - Daily - Platform
Mute tab
Meet - Daily - Platform
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Nikolay Yankov (Presenting, annotating)
Nikolay Yankov (Presenting, annotating)
People
9
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Stefka Stoyanova
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Yankov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Galya Dimitrova
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Steliyan Georgiev
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Aneliya Angelova
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Ivanov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things....
|
NULL
|
NULL
|
NULL
|
NULL
|
|
15377
|
686
|
34
|
2026-05-11T06:47:04.818045+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778482024818_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfiles→ToolsW FirefoxFileEditViewHistoryBookmarksProfiles→ToolsWindowHelp(alo)| Daily - Platform • now100% C8• Mon 11 May 9:47:04meet.google.com/mie-gawc-dsi?authuser=[EMAIL] Yankov (Presenting)+Platform TeamQ Search boardySeru Pla© pa83 Jm x83 ProO AM x ||0CI x|GAn x | (Ta xoun x*Ca x• Jm83 мC x0 3mOa0shttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/37?selectedissue=JY-2035208 Datadg © © *Caude9 CircieCiD Sentry %x DJ TuksInsights & Coachin0 DerJY-20269 1 4 J7-40352Group: QueriesSync opportunities without a local owner (user_id is null)PS$I31PhpStorm2. CRM Filling - Do not run analyses on opportunity that has no local user_id. No point in analysing noone's data.Q Open with VS Code1 branch22 commits1 pull request2 bullds3 days agoAllow users to delete SSand Panorama promptswhen those are used in a...AKirOKISDeployed3. Examine il there's a probiem with Sync Profiles. I.e.Team Data Literacy Academy( Prod US TeamID: 615) has many proflies, and deals with owner id but no user_jd. It alsolooks like we do not have the correct scope to read users from their hubspot.Validate sync proffies falls with more visiblity in such cases, so that we can request more scopes manually.ComponentsPlatformRelease AJ Panorama4. Opportunities that have owner_id, but no user_id should be ignored when syncing.AJ REPORTSDeployedR-20740 05 1) •.0•=Add optionsSubtasksLabelssummary in the CRMMon 11 May 9:47L Al BockmarxsStefka StoyanovaNikolay YankovGalya DimitrovaLukas Kovalik9:47 AM | Daily - Platform...
|
NULL
|
8824665967641080397
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfiles→ToolsW FirefoxFileEditViewHistoryBookmarksProfiles→ToolsWindowHelp(alo)| Daily - Platform • now100% C8• Mon 11 May 9:47:04meet.google.com/mie-gawc-dsi?authuser=[EMAIL] Yankov (Presenting)+Platform TeamQ Search boardySeru Pla© pa83 Jm x83 ProO AM x ||0CI x|GAn x | (Ta xoun x*Ca x• Jm83 мC x0 3mOa0shttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/37?selectedissue=JY-2035208 Datadg © © *Caude9 CircieCiD Sentry %x DJ TuksInsights & Coachin0 DerJY-20269 1 4 J7-40352Group: QueriesSync opportunities without a local owner (user_id is null)PS$I31PhpStorm2. CRM Filling - Do not run analyses on opportunity that has no local user_id. No point in analysing noone's data.Q Open with VS Code1 branch22 commits1 pull request2 bullds3 days agoAllow users to delete SSand Panorama promptswhen those are used in a...AKirOKISDeployed3. Examine il there's a probiem with Sync Profiles. I.e.Team Data Literacy Academy( Prod US TeamID: 615) has many proflies, and deals with owner id but no user_jd. It alsolooks like we do not have the correct scope to read users from their hubspot.Validate sync proffies falls with more visiblity in such cases, so that we can request more scopes manually.ComponentsPlatformRelease AJ Panorama4. Opportunities that have owner_id, but no user_id should be ignored when syncing.AJ REPORTSDeployedR-20740 05 1) •.0•=Add optionsSubtasksLabelssummary in the CRMMon 11 May 9:47L Al BockmarxsStefka StoyanovaNikolay YankovGalya DimitrovaLukas Kovalik9:47 AM | Daily - Platform...
|
15376
|
NULL
|
NULL
|
NULL
|
|
15440
|
688
|
34
|
2026-05-11T06:50:39.844284+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778482239844_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpmeet.google.com/mie-gawc-dsi?authuser=[EMAIL] - Platform - nowNikolay Yankov (Presenting)100% 12Mon 11 May 9:50:399+C Jy 20452 Servic83 Jmier8 Promohttps://fiminny.atlassian.net/jira/software/c/projects/JY/boards/37?selectedissue=JY-20625D Projects23 SSHPlatform Team %Q Search board286JY-20625AJ Panorama for CallScoring nn 0o(AUTOMATED AT EIGORINGKeooy torouyA Jy-2030125 •*** = 3Setup test coverage forProonoricherMASNTENANCSBacklogE 3-109511•*•*= 3O AttentCalsE DatadogCa Transp3 CircieClSentry* MCP• appіoMon 11 May 9:50L Al Bockmarxs0 Der0 UxGroup: QueriesAI Reports > Empty pagedesign and promotonAJREPORTSDeployed0 -20372 1 П •*** = /Grok via AzureMASNTENDeployed0 -20726 • ****=Allow users to delete SSand Panorama promptswhen those are used in a...AJ REPORTSDeployed0 -20770 12 •***=Release AJ PanoramaAJREPORTSDeployedД -20740 05 1 ..00:Wrong formatting forsummary in the CRMNikolay IvanovNikolay Yankov4 othersSteliyan GeorgievallLO NHLukas KovalikLộ39:50 AM | Daily - Platform• 2:12....
|
NULL
|
-4365149327344530584
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpmeet.google.com/mie-gawc-dsi?authuser=[EMAIL] - Platform - nowNikolay Yankov (Presenting)100% 12Mon 11 May 9:50:399+C Jy 20452 Servic83 Jmier8 Promohttps://fiminny.atlassian.net/jira/software/c/projects/JY/boards/37?selectedissue=JY-20625D Projects23 SSHPlatform Team %Q Search board286JY-20625AJ Panorama for CallScoring nn 0o(AUTOMATED AT EIGORINGKeooy torouyA Jy-2030125 •*** = 3Setup test coverage forProonoricherMASNTENANCSBacklogE 3-109511•*•*= 3O AttentCalsE DatadogCa Transp3 CircieClSentry* MCP• appіoMon 11 May 9:50L Al Bockmarxs0 Der0 UxGroup: QueriesAI Reports > Empty pagedesign and promotonAJREPORTSDeployed0 -20372 1 П •*** = /Grok via AzureMASNTENDeployed0 -20726 • ****=Allow users to delete SSand Panorama promptswhen those are used in a...AJ REPORTSDeployed0 -20770 12 •***=Release AJ PanoramaAJREPORTSDeployedД -20740 05 1 ..00:Wrong formatting forsummary in the CRMNikolay IvanovNikolay Yankov4 othersSteliyan GeorgievallLO NHLukas KovalikLộ39:50 AM | Daily - Platform• 2:12....
|
15439
|
NULL
|
NULL
|
NULL
|
|
15523
|
690
|
34
|
2026-05-11T06:57:04.415824+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778482624415_m1.jpg...
|
Firefox
|
Meet - Daily - Platform — Work
|
True
|
meet.google.com/mie-gawc-dsi?authuser=lukas.kovali meet.google.com/mie-gawc-dsi?authuser=lukas.kovalik@jiminny.com...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Meet - Daily - Platform
Close tab
New Tab
Open Goo Meet - Daily - Platform
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
9
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Yankov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things....
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Meet - Daily - Platform","depth":4,"bounds":{"left":0.0,"top":0.072222225,"width":0.033680554,"height":0.045555554},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.072222225,"width":0.010416667,"height":0.016666668},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.005902778,"top":0.12,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.7977778,"width":0.033680554,"height":0.043333333},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8411111,"width":0.033680554,"height":0.038333334},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.8794444,"width":0.033680554,"height":0.03888889},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.91833335,"width":0.033680554,"height":0.038333334},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.95666665,"width":0.033680554,"height":0.043333333},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Nikolay Yankov (Presenting)","depth":12,"bounds":{"left":0.07534722,"top":0.101111114,"width":0.124305554,"height":0.022222223},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov (Presenting)","depth":13,"bounds":{"left":0.07534722,"top":0.10222222,"width":0.124305554,"height":0.020555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.88680553,"top":0.08944444,"width":0.04097222,"height":0.04},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"9","depth":22,"bounds":{"left":0.9145833,"top":0.101111114,"width":0.0048611113,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.93333334,"top":0.08944444,"width":0.025,"height":0.04},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.9361111,"top":0.101111114,"width":0.06388891,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini","depth":17,"bounds":{"left":0.96666664,"top":0.101111114,"width":0.028125,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Gemini","depth":17,"bounds":{"left":0.96458334,"top":0.090555556,"width":0.023611112,"height":0.037777778},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.5798611,"top":0.61,"width":0.14652778,"height":0.08888889},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.7239583,"top":0.6244444,"width":0.08090278,"height":0.018888889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.7017361,"top":0.6205556,"width":0.11076389,"height":0.05666667},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zoom in","depth":13,"bounds":{"left":0.63090277,"top":0.78333336,"width":0.027777778,"height":0.044444446},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open in new window","depth":13,"bounds":{"left":0.6642361,"top":0.78333336,"width":0.027777778,"height":0.044444446},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Enter Full Screen","depth":13,"bounds":{"left":0.69756943,"top":0.78333336,"width":0.027777778,"height":0.044444446},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.78541666,"top":0.27611113,"width":0.14652778,"height":0.07722222},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.9295139,"top":0.2911111,"width":0.07048613,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.90729165,"top":0.28666666,"width":0.09270835,"height":0.045},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":17,"bounds":{"left":0.753125,"top":0.36277777,"width":0.07673611,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.91180557,"top":0.27611113,"width":0.08819443,"height":0.07722222},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":1.0,"top":0.2911111,"width":-0.05590272,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":1.0,"top":0.28666666,"width":-0.03368056,"height":0.045},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":17,"bounds":{"left":0.87951386,"top":0.36277777,"width":0.07847222,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.77916664,"top":0.5338889,"width":0.14652778,"height":0.07722222},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.9232639,"top":0.54888886,"width":0.07569444,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.9010417,"top":0.54444444,"width":0.09895831,"height":0.045},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-1056405375135102785
|
-6461707526030066940
|
visual_change
|
accessibility
|
NULL
|
Meet - Daily - Platform
Close tab
New Tab
Open Goo Meet - Daily - Platform
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
9
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Yankov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things....
|
NULL
|
NULL
|
NULL
|
NULL
|
|
15576
|
692
|
34
|
2026-05-11T07:02:01.676688+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778482921676_m1.jpg...
|
Firefox
|
Meet - Daily - Platform — Work
|
True
|
meet.google.com/mie-gawc-dsi?authuser=lukas.kovali meet.google.com/mie-gawc-dsi?authuser=lukas.kovalik@jiminny.com...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Meet - Daily - Platform
Close tab
New Tab
Open Goo Meet - Daily - Platform
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
9
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Yankov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Stefka Stoyanova
User profile picture User profile picture 4 others
4 others
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:02
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Meet - Daily - Platform","depth":4,"bounds":{"left":0.0,"top":0.072222225,"width":0.033680554,"height":0.045555554},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.072222225,"width":0.010416667,"height":0.016666668},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.005902778,"top":0.12,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.7977778,"width":0.033680554,"height":0.043333333},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8411111,"width":0.033680554,"height":0.038333334},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.8794444,"width":0.033680554,"height":0.03888889},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.91833335,"width":0.033680554,"height":0.038333334},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.95666665,"width":0.033680554,"height":0.043333333},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Nikolay Yankov (Presenting)","depth":12,"bounds":{"left":0.07534722,"top":0.101111114,"width":0.124305554,"height":0.022222223},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov (Presenting)","depth":13,"bounds":{"left":0.07534722,"top":0.10222222,"width":0.124305554,"height":0.020555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.88680553,"top":0.08944444,"width":0.04097222,"height":0.04},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"9","depth":22,"bounds":{"left":0.9145833,"top":0.101111114,"width":0.0048611113,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.93333334,"top":0.08944444,"width":0.025,"height":0.04},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.9361111,"top":0.101111114,"width":0.06388891,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini","depth":17,"bounds":{"left":0.96666664,"top":0.101111114,"width":0.028125,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Gemini","depth":17,"bounds":{"left":0.96458334,"top":0.090555556,"width":0.023611112,"height":0.037777778},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.5798611,"top":0.61,"width":0.14652778,"height":0.08888889},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.7239583,"top":0.6244444,"width":0.08090278,"height":0.018888889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.7017361,"top":0.6205556,"width":0.11076389,"height":0.05666667},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zoom in","depth":13,"bounds":{"left":0.63090277,"top":0.78333336,"width":0.027777778,"height":0.044444446},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open in new window","depth":13,"bounds":{"left":0.6642361,"top":0.78333336,"width":0.027777778,"height":0.044444446},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Enter Full Screen","depth":13,"bounds":{"left":0.69756943,"top":0.78333336,"width":0.027777778,"height":0.044444446},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.78541666,"top":0.27611113,"width":0.14652778,"height":0.07722222},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.9295139,"top":0.2911111,"width":0.07048613,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.90729165,"top":0.28666666,"width":0.09270835,"height":0.045},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":17,"bounds":{"left":0.753125,"top":0.36277777,"width":0.07847222,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.91180557,"top":0.27611113,"width":0.08819443,"height":0.07722222},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":1.0,"top":0.2911111,"width":-0.05590272,"height":0.017777778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":1.0,"top":0.28666666,"width":-0.03368056,"height":0.045},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":17,"bounds":{"left":0.87951386,"top":0.36277777,"width":0.07673611,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.77916664,"top":0.5338889,"width":0.14652778,"height":0.07722222},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.9232639,"top":0.54888886,"width":0.07569444,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.9010417,"top":0.54444444,"width":0.09895831,"height":0.045},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":17,"bounds":{"left":0.753125,"top":0.6205556,"width":0.088194445,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"User profile picture User profile picture 4 others","depth":11,"bounds":{"left":0.87118053,"top":0.40888888,"width":0.11805555,"height":0.24444444},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"4 others","depth":13,"bounds":{"left":0.90902776,"top":0.55722225,"width":0.04236111,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.8840278,"top":0.7916667,"width":0.11597222,"height":0.07722222},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.8107639,"top":0.8066667,"width":0.07569444,"height":0.017777778},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.79131943,"top":0.80222225,"width":0.11736111,"height":0.045},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.753125,"top":0.87833333,"width":0.06875,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Others might see more of your background. Click to view your full video.","depth":14,"bounds":{"left":0.96631944,"top":0.875,"width":0.018055556,"height":0.028888889},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"10:02","depth":12,"bounds":{"left":0.050347224,"top":0.9444444,"width":0.028472222,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AM","depth":12,"bounds":{"left":0.08229167,"top":0.9444444,"width":0.017708333,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Daily - Platform","depth":12,"bounds":{"left":0.11736111,"top":0.9111111,"width":0.08090278,"height":0.08888888},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Daily - Platform","depth":15,"bounds":{"left":0.11736111,"top":0.9444444,"width":0.08090278,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Audio settings","depth":13,"bounds":{"left":0.32118055,"top":0.9288889,"width":0.06111111,"height":0.053333335},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on microphone","depth":13,"bounds":{"left":0.34895834,"top":0.9288889,"width":0.033333335,"height":0.053333335},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false}]...
|
-3724040068053205181
|
-6606244926570988796
|
visual_change
|
accessibility
|
NULL
|
Meet - Daily - Platform
Close tab
New Tab
Open Goo Meet - Daily - Platform
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
9
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Yankov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Stefka Stoyanova
User profile picture User profile picture 4 others
4 others
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:02
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
15659
|
695
|
34
|
2026-05-11T07:07:25.859042+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778483245859_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
True
|
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
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65...
|
[{"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.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.35605052,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"65","depth":4,"bounds":{"left":0.36602393,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"}]...
|
-5636336127640244115
|
-8780892160029119550
|
visual_change
|
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
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
PhostormVIewINavicareCodeKeractorFV faVsco.js?9 JY-20725-handle-HS-search-rate-limitroledey© SyncRelatedActivityManager.php© BatchSyncCollectol© HubspotSyncStrategyBase.phpCachedcrmservicebecorator.onp© ProspectCache.phpe balchsynckealsseС Cпескапокetrукemotematch.ongo closedDealstagess)MatchactivitycrmData.ong© CrmActivityService.phgDealrielasservice.g© CrmObiectsResolver.phpc)Decorateacuivilv.or© FieldDefinitions.phrclass Cllent extends Baseclient 1mpLements Hubspotcllentintertace— | A2 A65 X1X1AC) FieldT vpeconvertee Hubspotclientinter* doaram bool sarchivedc) Hubspotlokenman© PayloadBuilder.php* aneturn array<Owner>|[C) RemotecrmobiectrP ResponseNormalize13 usagesc) Service,onoC)SvncFieldAction.onpublic function getOwnersArchived(bool $archived = true): arrayC) SvncRelatedActivitSendpoint ="crm/vs/owners':C) WebhookSvncBatclSoueryParams =v MintearationAorarchived" = Sarchived ? "true': "false',M AcceccorsConfigSquervstrind = htto bulld auery squerv?arams):D DTOSowners = 1D FiltersD JobsProcnectSearchStratrySresnonse = Sthis->makeRequest(endnoint• Sendooint. auervStrina: SauervStrino)•W service lraltsSresnonselata = Sresnonse?->toArravO.© DataClient.phpConsole,LOg XChanaes 11 files= env.local aonTJ0 + → Side-by-side viewer •8 35f036ac app/Services/Crm/Hubspot/Client.phgDo not ignoreHiahliaht wordsyXBô ?© HandleHubspotRateLimit.php app/Jobs/Middleware© HubspotClientinterface.php app/Services/Crm/Hubspotpublic tunction -_constructSocialAccountService SsocialAccountService.i© HubspotPaginationService.php app/Services/Crm/Hubspot/Pagination@ JiminnyDebugCommand.php app/Console/Commandsphp logging.php config© MatchActivityCrmData.php app/Jobs/CrmHubspotTokenManager stokenanagennarent:: construct(SsocialAccountService):Sthis->naginationService = SnaainationService:© MatchCrmData.php app/Jobs/Activity/Import© PaginationState.php app/Services/Crm/Hubspot/PaginationSthis->tokenManaden = StokenManagen:© RateLimitException.php app/ExceptionsSthis->setRaselln1(self.•RASE URID:Unversioned Files 9 files=.env.nikilocal appE.env.other appSthis->setVension/self.•MTN APT VERSTON)•@) CanAccessAiReportsTest.php tests/Unit/Policies© CreateMockAskJiminnvReportResultCommand.php app/Console/Commands/Rep_public function getMinimumApiVersion: string6 favicon.ico publicnotunn colf.-MTN ApT VEpSTON.Eids.txt aprT raw sal querv.sal appataceneratoro nc) SimulateWe.hookscommand.ohoaoo/console/commands/crm/=uosootMJ WEBHOOK FILTERING IMPLEMENTATION.md apdSlastRecordIdolner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (50 minutes aao)=custom.log~=laravel.logA SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKOb.A console [EU]# console [slAGiNg)[2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {"neaders".?"Uace":L"Inu,or May 2020 14.21.15 6Ml"Jn"Concent-lvoe". "apolicacionison.charser=utr-on"Transter-Encod1nq":"chunked")."Connection":"keep-alive""CF-Ray" : ["9f80deb8db60dc3a-SOF"],"Strict-Transport-Secur1ty":"max-aqe=31536008* 1ncludeSubDomains: preload")n"Vary"*"orioin.accent-encodino""access-control-allow-credentials": ["false"]."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\","x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],"So+-Cookie"." c+hm-Stlirtd0aXVr.kSandas6hzVVKhzTn0BidvMaheCtm0V-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Report-To":["{"endpoints\":[{"unl".httns:a.nel.cloudflane.com./nenon+|W/v42c=NVA1cVTPQfVm32anS0axVF/sd2R\"group)":\"cf-nel\","max_age\":604800}"],"NEL":["{success_traccion.0.01rreportto. "cr-nel,• suppont Dally • In 4h 03m100% Lz. Mon 11 May 10:07:25AskJiminnyReportActivityServiceTestvCascadeHubspot Rate Limit Re+0 ..3. We just made an additional API call while already rate-limited - amplifying the pressure4. If matchßvPhone returns nothina too, the activity aets nersisted las "no CPM match" even though the contact eyists in HubSnot. Wrona data, no sianal to retrvThe middleware on MatchActivityCrmData cannot help, because the 429 was already swallowed before any RateLimitException could be raised.how serious is it reallv?In practice - probably rare, but still wrong. The GET-by-email endpoint shares HubSpot's portal-wide burst quota (100/10s on Free/Starter, 150/10s on Pro+200/10s with the AP| add-on), which is much more generous than the search endpoint (5 RPS). 429s on this endpoint are uncommon. But:• During heavy backfills they do happen — the same worker pool that's hammering search will also be hammering getContactByEmail• When it does hannen. the cost is silent data corruntion wrona CRM match) olus extra wasted APl calis fallina throuch the cascadeWhat you should decideGiven vour simplification (only Client::searcho raises RateLimitException, onlv MatchActivityCrmData middleware handles it, vou have two reasonableontions,Option A — Accept the gap, document it. The PR's scope is "handle search endpoint rate limits" since that's where 429s actually hurt. Email-by-id 429s are rareand currently treated as "not found" - same as before this PR. Nothing breaks, you just don't fix this particular gap. Add a TODO/follow-up ticketOntion B - Wrao_netContactByEmaillin executeRenest@_too.Five-line chance. then the email-match.sten_would also_throw.RateldimitExcention middlewarebecause those aren't on the MatchActivityCrmData hot path,Mwrecommendation.OptionB.tsiattinvaddiiion.that closes.the matchina cascade.stirststep.whichls.the.mostchitpath. withoutrt.theinew.midclleware missesthe most common entry point of MatchActivityCrmData's CRM lookupsD phpAsk anything (&AL)+ <> CodeClaude Opus 4.7 MediumQ differencesCurrent versionpublic function -_constructlSocialAccountService SsocialAccountService.HubsootTokenManager StokenManagernarent:: construct(ssocialAccountService):$this->paginationService = $paginationService;Sthis->tokenManaden = StokenManagen:Sthis->setRaselln1(self••RASE |RI)•Sthis->setVension/self••MTN APT VERSTON).* Reacts to a rate limits (429) from HubSpot by translating it* into a RateLimitException carrying retry _after.* Wrap any outbound HubSpot call (SDK or raw HTTP) like:Sthis->executeRequest(fn • => Sthis->qetNewInstance0->crmО->...);WN Windsurf Teams007-50 UTF.8Po 4 spaces...
|
15658
|
NULL
|
NULL
|
NULL
|
|
15756
|
697
|
34
|
2026-05-11T07:12:47.024865+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778483567024_m2.jpg...
|
PhpStorm
|
faVsco.js – MatchActivityCrmData.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavicareCodeLaravelKeractorFV faVsco. PhostormVIewINavicareCodeLaravelKeractorFV faVsco.js?9 JY-20725-handle-HS-search-rate-limitProiect v>M lustCalli© HubspotSyncStrategyBase.phpm PushSummarvToCrm> D RingCentral>• ZoomPhone© ActivityChangeCatego© AssignOwnership.php© ConferenceCrmMatch© DeleteActivities.php© DeleteTeamChurnData© DeleteTeamsRetentior© HardDeleteActivities.p© HardDeleteActivity.ph©) MatchActivitvCrmData.pnp© ermactivilyservice.phgc MatchermData.onoc) keindexroraccouniJo!© ReindexForContact.JotC) ReindexForGrouoJob.r© ReindexForLead.Job.pl(C) ReindexForOpportunit@ ReindexForUser.Job.oh(C) RetrvActivitvSvnc.00.1l@ SyncActivity.php(C) TeardownStream.ohoM Ai AutomationM A Renorts> Audiov AutomatedRenorts(c) ReauectGenerateAck.1© RequestGenerateRepo© SendReportExpiringSo(C) SendPenart lnh nhn.© SendReportMailJob.ph© SendReportNotGenera> @ Calendarv D Crmv 0 Delete© DeleteAccountJob.© DeleteContact.Job.r€ DeleteCrmEntityTra© DeleteLeadJob.phpC) DeleteOpportunitvJ© VerifvActivitvCrmTa>MHubspot> M Salesforce© AutoloaDelavedToCrmC) CheckAndRetrvRemott© CreateFollowunActivit.C) CreateNotes.oho(C) MatchActivitvCrmbateuse ILLuminate \Contracts \Queue \ShouLdBeUnique;use "Luminate contracts Queve Shoul doveve:use Illuminate Database Connection;use Illuminate \Queue \InteractsWithQueue;use Illuminate\Queue\SerializesModelsuse iluminate Suoport Facades Loa:use Jiminny Component \Queue \Constants;use Jiminny Excentions InvalidArgumentExcentionsuse Jiminny Jobs \Job;use Jiminny (Jobs \Middleware \HandleHubspotRateLimit;use Jiminny Models Activity:use Jiminny Models\Crm\Configuration;use Jiminny Repositories ActivityRepository:use Jiminny\Services\Crm\CrmActivityService;use Psr\Container\ContainerExceptionInterface;use Psr\Container\NotFoundExceptionInterface;use Throwable:class MatchActivityCrmData extends Job implements ShouldQueue, ShouldBeUniqueuse InteractsWithQueve:use SerializesModels:public int Stries = 3:10 usagesprivate int Sactivitvid:private ?Confiauration sfronConfiauration:orivate hool SremoteSearch.public function middleware: arrayt...}public function __construct(int SactivityId,?Configuration $fromConfiguration = null,bool SremoteSearch = false,public function uniqueldo: stringf...}public function timeouto: intf...}1 usage(C) SaveActivitv nhn(@ SaveTranccrintion nhrpublic function uniqueFor0: intf...}lelner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)© SyncRelatedActivityManager.php© ProspectCache.phpС Cпескапокetrукemotematch.ong=custom.log~=laravel.logA SF (jiminny@localhost]4 HS_local [jiminny@localhost]# console [PKob.# console leu)# console [slAGiNG)[2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {"neaders".?"Uace":L"Inu,or May 2020 14.21.15 6Ml"Jn"Transter-Encod1nq":"chunked")."Connection":"keep-alive""CF-Ray" : ["9f80deb8db60dc3a-SOF"],"Strict-Transport-Secur1ty":"max-aqe=31536008* 1ncludeSubDomains: preload")n"Vary"*"orioin.accent-encodino""access-control-allow-credentials": ["false"]."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\","x-content-tvoe-ootions":"nosniff"]"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],"Set-Cookie":["__cf_bm=StUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To"."","endpoints\":[{22"unl".httns:a.nel.cloudflane.com./nenon+|W/v42c=NVA1cVTPQfVm32anS0ixVF/sd2RI\"group)":\"cf-nel\","max_age\":604800}"],"NEL":["{\"success_fraction\":0.01,reportto. "cr-nel,"max age":604800}"]"Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/sboYeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545supoont Dally • In 4h 40m100% L2• Mon 11 May 10:12:46AskJiminnyReportActivityServiceTest vCascadeHubspot Rate Limit Re+0 ..(a) Silent rate limit treated as "no contact found". The job moves on, calls matchByPhone(), then matchByDomain(), etc. - making more HubSpot API calls underrate limit pressure. We're amplitving the problem instead of backing oft.(b) Wrong CRM matching outcome. A 429 is now indistinguishable from a legit "email not in HubSpot" response. The activity gets matched to wrong (or no) CRMdata and is persisted that way —(c) MatchActivityCrmData's middleware is a no-op for this path. You added HandleHubspotRateLimit to the job - but since getContactByEmail swallows the429, the middleware never sees a RateLimitException. The middleware only fires for code paths that go through executeRequest (), which today is only search().So for the email-match flow (the most common path in CrmObjectsResolver: : resolveFromCall), the rate limit handling is effectively dead code(d) getContactById, getOpportunityById, getAccountById have the same problem. They catch the typed ApiException and rethrow it (not wrap as RateLimitE›ception). And batchRead0biects catches evervthing in handleBatchErroro and rethrows as CrmException, also losina the 429 signal.The fixWrap the SDK calls in executeRequest() so they convert 429 → RateLimitException consistently. Sketch;•phppublic function getContactByEnail(string semail, array sfields = (l): arraytry{fn 0 = Sthil->getNewInstance()->crm()->contacts()->basicApi(->getbyld(Semall, 1mplodel, Stields), null, talse,'email')return ('id' => Scontact->getId(), 'properties' = $contact->getProperties()]:} catch (RateLimitException Se) {throw $e;let jobmiddleware handle} catch (ContactApiException Se) {/ genuine 404 / not-found: current behavion$this->log->info('[Hubspot) Failed to fetch contact', [...]);Note executeRequest's current 1sHubspotRateLimt already includes contactApiException, so this works as-is - you just need to actually route the call throughit. Same pattern for getContactById, getOpportunityById, getAccountById, get0wners, batchRead0bjects, and the makeRequest() raw HTTP path.Why this matters with the rate-limiter increment in MatchCrmDataYou moved thisMatchCrmData.nho:112-113)ScrmObjects = $crmObjectsResolver->resolveFromCall($this->crmService, $this->calU);SrateLimiter->incrementRequestCount(Sactivity->getCrm()):resolveFromCall may issue 2-4 HubSpot API calls (email + phone + domain + identifier matches). The job-level limiter still counts that as 1. Today this was OKbecause there was no client-side limit at all. Once the new reactive limit is in place:• If any inner call 429s, RateLimitException bubbles middleware releases the job → incrementRequestCount is never called for that attempt• The job-level counter stays low; the next attempt fires immediately when middleware delay expiresNet effect. the client@level reacfivellimitlis doinc.the reallbackoff.thelioh-levelllimiterlis.now.amuch.coarser.secondarv.quardTihistis/iine.but.means.the.DrovderRateLimiter quota numbers should probably be relaxed (or the increment moved closer to each underlving APl call. e.a. inside executeRequesto itselfStrong suggestion: if you want the job-level limiter to remain meaningful, increment it from inside Client:: executeRequest() once per actual HTTP call, not onceper resolveFromCal1(). Otherwise the two lavers are calibrated against different units (1 iob vs 1-4 HTTP calls) and tunina becomes quesswork.Ok now i simplified it. There is only passing through @CLient.php#L75-95 ifit is callfrom CHubspotPaginationservice.php#f_26-84 Andif it is call from @HubspotPaginationService.php#L26-84 And only place where theW Windsurf Toams 26.1 (6809 charc 194 line hreakc)lio 4 space:...
|
NULL
|
-2358778553549383380
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavicareCodeLaravelKeractorFV faVsco. PhostormVIewINavicareCodeLaravelKeractorFV faVsco.js?9 JY-20725-handle-HS-search-rate-limitProiect v>M lustCalli© HubspotSyncStrategyBase.phpm PushSummarvToCrm> D RingCentral>• ZoomPhone© ActivityChangeCatego© AssignOwnership.php© ConferenceCrmMatch© DeleteActivities.php© DeleteTeamChurnData© DeleteTeamsRetentior© HardDeleteActivities.p© HardDeleteActivity.ph©) MatchActivitvCrmData.pnp© ermactivilyservice.phgc MatchermData.onoc) keindexroraccouniJo!© ReindexForContact.JotC) ReindexForGrouoJob.r© ReindexForLead.Job.pl(C) ReindexForOpportunit@ ReindexForUser.Job.oh(C) RetrvActivitvSvnc.00.1l@ SyncActivity.php(C) TeardownStream.ohoM Ai AutomationM A Renorts> Audiov AutomatedRenorts(c) ReauectGenerateAck.1© RequestGenerateRepo© SendReportExpiringSo(C) SendPenart lnh nhn.© SendReportMailJob.ph© SendReportNotGenera> @ Calendarv D Crmv 0 Delete© DeleteAccountJob.© DeleteContact.Job.r€ DeleteCrmEntityTra© DeleteLeadJob.phpC) DeleteOpportunitvJ© VerifvActivitvCrmTa>MHubspot> M Salesforce© AutoloaDelavedToCrmC) CheckAndRetrvRemott© CreateFollowunActivit.C) CreateNotes.oho(C) MatchActivitvCrmbateuse ILLuminate \Contracts \Queue \ShouLdBeUnique;use "Luminate contracts Queve Shoul doveve:use Illuminate Database Connection;use Illuminate \Queue \InteractsWithQueue;use Illuminate\Queue\SerializesModelsuse iluminate Suoport Facades Loa:use Jiminny Component \Queue \Constants;use Jiminny Excentions InvalidArgumentExcentionsuse Jiminny Jobs \Job;use Jiminny (Jobs \Middleware \HandleHubspotRateLimit;use Jiminny Models Activity:use Jiminny Models\Crm\Configuration;use Jiminny Repositories ActivityRepository:use Jiminny\Services\Crm\CrmActivityService;use Psr\Container\ContainerExceptionInterface;use Psr\Container\NotFoundExceptionInterface;use Throwable:class MatchActivityCrmData extends Job implements ShouldQueue, ShouldBeUniqueuse InteractsWithQueve:use SerializesModels:public int Stries = 3:10 usagesprivate int Sactivitvid:private ?Confiauration sfronConfiauration:orivate hool SremoteSearch.public function middleware: arrayt...}public function __construct(int SactivityId,?Configuration $fromConfiguration = null,bool SremoteSearch = false,public function uniqueldo: stringf...}public function timeouto: intf...}1 usage(C) SaveActivitv nhn(@ SaveTranccrintion nhrpublic function uniqueFor0: intf...}lelner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)© SyncRelatedActivityManager.php© ProspectCache.phpС Cпескапокetrукemotematch.ong=custom.log~=laravel.logA SF (jiminny@localhost]4 HS_local [jiminny@localhost]# console [PKob.# console leu)# console [slAGiNG)[2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {"neaders".?"Uace":L"Inu,or May 2020 14.21.15 6Ml"Jn"Transter-Encod1nq":"chunked")."Connection":"keep-alive""CF-Ray" : ["9f80deb8db60dc3a-SOF"],"Strict-Transport-Secur1ty":"max-aqe=31536008* 1ncludeSubDomains: preload")n"Vary"*"orioin.accent-encodino""access-control-allow-credentials": ["false"]."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\","x-content-tvoe-ootions":"nosniff"]"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],"Set-Cookie":["__cf_bm=StUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.107-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To"."","endpoints\":[{22"unl".httns:a.nel.cloudflane.com./nenon+|W/v42c=NVA1cVTPQfVm32anS0ixVF/sd2RI\"group)":\"cf-nel\","max_age\":604800}"],"NEL":["{\"success_fraction\":0.01,reportto. "cr-nel,"max age":604800}"]"Server": ["cloudflare"]}} {"correlation_1d":"95256555-ec98-4541-b9za-adta/sboYeab","trace_10":"C/AD8565-905t-4604-9405-0e5b551e5545supoont Dally • In 4h 40m100% L2• Mon 11 May 10:12:46AskJiminnyReportActivityServiceTest vCascadeHubspot Rate Limit Re+0 ..(a) Silent rate limit treated as "no contact found". The job moves on, calls matchByPhone(), then matchByDomain(), etc. - making more HubSpot API calls underrate limit pressure. We're amplitving the problem instead of backing oft.(b) Wrong CRM matching outcome. A 429 is now indistinguishable from a legit "email not in HubSpot" response. The activity gets matched to wrong (or no) CRMdata and is persisted that way —(c) MatchActivityCrmData's middleware is a no-op for this path. You added HandleHubspotRateLimit to the job - but since getContactByEmail swallows the429, the middleware never sees a RateLimitException. The middleware only fires for code paths that go through executeRequest (), which today is only search().So for the email-match flow (the most common path in CrmObjectsResolver: : resolveFromCall), the rate limit handling is effectively dead code(d) getContactById, getOpportunityById, getAccountById have the same problem. They catch the typed ApiException and rethrow it (not wrap as RateLimitE›ception). And batchRead0biects catches evervthing in handleBatchErroro and rethrows as CrmException, also losina the 429 signal.The fixWrap the SDK calls in executeRequest() so they convert 429 → RateLimitException consistently. Sketch;•phppublic function getContactByEnail(string semail, array sfields = (l): arraytry{fn 0 = Sthil->getNewInstance()->crm()->contacts()->basicApi(->getbyld(Semall, 1mplodel, Stields), null, talse,'email')return ('id' => Scontact->getId(), 'properties' = $contact->getProperties()]:} catch (RateLimitException Se) {throw $e;let jobmiddleware handle} catch (ContactApiException Se) {/ genuine 404 / not-found: current behavion$this->log->info('[Hubspot) Failed to fetch contact', [...]);Note executeRequest's current 1sHubspotRateLimt already includes contactApiException, so this works as-is - you just need to actually route the call throughit. Same pattern for getContactById, getOpportunityById, getAccountById, get0wners, batchRead0bjects, and the makeRequest() raw HTTP path.Why this matters with the rate-limiter increment in MatchCrmDataYou moved thisMatchCrmData.nho:112-113)ScrmObjects = $crmObjectsResolver->resolveFromCall($this->crmService, $this->calU);SrateLimiter->incrementRequestCount(Sactivity->getCrm()):resolveFromCall may issue 2-4 HubSpot API calls (email + phone + domain + identifier matches). The job-level limiter still counts that as 1. Today this was OKbecause there was no client-side limit at all. Once the new reactive limit is in place:• If any inner call 429s, RateLimitException bubbles middleware releases the job → incrementRequestCount is never called for that attempt• The job-level counter stays low; the next attempt fires immediately when middleware delay expiresNet effect. the client@level reacfivellimitlis doinc.the reallbackoff.thelioh-levelllimiterlis.now.amuch.coarser.secondarv.quardTihistis/iine.but.means.the.DrovderRateLimiter quota numbers should probably be relaxed (or the increment moved closer to each underlving APl call. e.a. inside executeRequesto itselfStrong suggestion: if you want the job-level limiter to remain meaningful, increment it from inside Client:: executeRequest() once per actual HTTP call, not onceper resolveFromCal1(). Otherwise the two lavers are calibrated against different units (1 iob vs 1-4 HTTP calls) and tunina becomes quesswork.Ok now i simplified it. There is only passing through @CLient.php#L75-95 ifit is callfrom CHubspotPaginationservice.php#f_26-84 Andif it is call from @HubspotPaginationService.php#L26-84 And only place where theW Windsurf Toams 26.1 (6809 charc 194 line hreakc)lio 4 space:...
|
15754
|
NULL
|
NULL
|
NULL
|
|
15759
|
696
|
34
|
2026-05-11T07:13:07.242338+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778483587242_m1.jpg...
|
Notion Calendar
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Firefox FileEditViewHistoryBookmarksProfilesToolsW Firefox FileEditViewHistoryBookmarksProfilesToolsWindowHelp<DEV (docker)• жз• Support Daily • in 4h 47 mDOCKER-₴81DEV (docker)882APP (-zsh)masterJY-20818-move-AJ-reports-to-separated-datadog-metricJY-20773-fix-automated-reports-user-pilot-trackingJY-20157-AJ-report-not-send-notificationJY-20508-notify-before-AJ-report-expirationJY-20372-ai-reports-promotion-pagesJY-20352-sync-opportunities-without-a-local-owner-user-id-is-nullJY-20738-debug-AJ-tracking-UPJY-18909-automated-reports-ask-jiminnyJY-20692-fix-integration-app-[API_KEY] laysJY-20698-fix-SF-activity-types-on-new-playbookJY-20543-AJ-report-trackingJY-20384-handle-auto-sync-with-no-access-to-event-typeJY-20458-ask-Jiminny-user-definitionsJY-19666-fix-import-contacts-account-associationJY-19666-HS-import-contacts-and-accounts-batch-jobJY-20458-Ask-Jiminny-ReportsJY-20200-batch-update-CRM-objects-SalesforceJY-19666-HS-webhooks-add-contact-and-companyJY-20348-trigger-setup-DI-layout-on-team-creationJY-20326-refactor-info-message-in-commandJY-20317-fix-auto-log-delay-issue-on-all-channels-disabledJY-20312-remove-on-update-change-last-synced-at-crm-configurationsJY-20306-SF-skip-auto-sync-for-task-based-playbookJY-20192-remove-deleted-team-from-saved-search-filtersJY-20197-import-opportunity-batch-jobJY-20293-enable-status-field-for-pipedrive-dealsJY-20191-remove-commands-interactive-promptsJY-20118-change-default-sync-strategyJY-20183-add-cache-on-auto-log-delayJY-20197-add-import-opportunity-batch-job20118-hs-opportunity-make-webhook-strategy-defaultJY-20118-make-default-hs-opportunity-sync-strategy-webhook-basedJY-20196-handle-opportunity-without-noteJY-20118-improve-opportunity-importJY-20189-handle-activity-search-on-deleted-groupsJY-20160JY-20145-filter-out-converted-leads-when-matchingJY-20150-skip-push-summary-on-summary-ready-1f-autologJY-20132-fix-note-encodingJY-19792-clean-logslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ devroot@docker_lamp_1:/home/jiminny# ]-zsh84-zsh885100% <78• Mon 11 May 10:13:07T₴1screenpipe"#6DEV...
|
NULL
|
-6369430659159680801
|
NULL
|
visual_change
|
ocr
|
NULL
|
Firefox FileEditViewHistoryBookmarksProfilesToolsW Firefox FileEditViewHistoryBookmarksProfilesToolsWindowHelp<DEV (docker)• жз• Support Daily • in 4h 47 mDOCKER-₴81DEV (docker)882APP (-zsh)masterJY-20818-move-AJ-reports-to-separated-datadog-metricJY-20773-fix-automated-reports-user-pilot-trackingJY-20157-AJ-report-not-send-notificationJY-20508-notify-before-AJ-report-expirationJY-20372-ai-reports-promotion-pagesJY-20352-sync-opportunities-without-a-local-owner-user-id-is-nullJY-20738-debug-AJ-tracking-UPJY-18909-automated-reports-ask-jiminnyJY-20692-fix-integration-app-[API_KEY] laysJY-20698-fix-SF-activity-types-on-new-playbookJY-20543-AJ-report-trackingJY-20384-handle-auto-sync-with-no-access-to-event-typeJY-20458-ask-Jiminny-user-definitionsJY-19666-fix-import-contacts-account-associationJY-19666-HS-import-contacts-and-accounts-batch-jobJY-20458-Ask-Jiminny-ReportsJY-20200-batch-update-CRM-objects-SalesforceJY-19666-HS-webhooks-add-contact-and-companyJY-20348-trigger-setup-DI-layout-on-team-creationJY-20326-refactor-info-message-in-commandJY-20317-fix-auto-log-delay-issue-on-all-channels-disabledJY-20312-remove-on-update-change-last-synced-at-crm-configurationsJY-20306-SF-skip-auto-sync-for-task-based-playbookJY-20192-remove-deleted-team-from-saved-search-filtersJY-20197-import-opportunity-batch-jobJY-20293-enable-status-field-for-pipedrive-dealsJY-20191-remove-commands-interactive-promptsJY-20118-change-default-sync-strategyJY-20183-add-cache-on-auto-log-delayJY-20197-add-import-opportunity-batch-job20118-hs-opportunity-make-webhook-strategy-defaultJY-20118-make-default-hs-opportunity-sync-strategy-webhook-basedJY-20196-handle-opportunity-without-noteJY-20118-improve-opportunity-importJY-20189-handle-activity-search-on-deleted-groupsJY-20160JY-20145-filter-out-converted-leads-when-matchingJY-20150-skip-push-summary-on-summary-ready-1f-autologJY-20132-fix-note-encodingJY-19792-clean-logslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ devroot@docker_lamp_1:/home/jiminny# ]-zsh84-zsh885100% <78• Mon 11 May 10:13:07T₴1screenpipe"#6DEV...
|
15757
|
NULL
|
NULL
|
NULL
|
|
16406
|
735
|
34
|
2026-05-11T08:49:07.851796+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778489347851_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
True
|
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
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-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.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"bounds":{"left":0.11968085,"top":0.1811652,"width":0.29886967,"height":0.8188348},"on_screen":true,"lines":[{"char_start":7,"char_count":25,"bounds":{"left":0.11968085,"top":0.0,"width":0.06216755,"height":0.014365523}},{"char_start":33,"char_count":35,"bounds":{"left":0.11968085,"top":0.0,"width":0.08809841,"height":0.014365523}},{"char_start":69,"char_count":36,"bounds":{"left":0.11968085,"top":0.0047885077,"width":0.010305851,"height":0.014365523}},{"char_start":105,"char_count":43,"bounds":{"left":0.1299867,"top":0.0047885077,"width":0.0076462766,"height":0.014365523}},{"char_start":149,"char_count":4,"bounds":{"left":0.11968085,"top":0.03990423,"width":0.0076462766,"height":0.014365523}},{"char_start":153,"char_count":73,"bounds":{"left":0.11968085,"top":0.057462092,"width":0.18650267,"height":0.014365523}},{"char_start":226,"char_count":70,"bounds":{"left":0.11968085,"top":0.075019956,"width":0.17885639,"height":0.014365523}}],"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","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}]...
|
3796536579749804112
|
-7516476465275915830
|
visual_change
|
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
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16553
|
741
|
34
|
2026-05-11T09:04:08.616954+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778490248616_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
True
|
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
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
1
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\Cache;
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 = Cache::get($cacheKey);
if (is_int($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
$cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Cache::put($cacheKey, $retryAfter, $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($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;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
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->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
//
// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
// $body = json_decode((string) $response->getBody(), true);
//
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (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);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}...
|
[{"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.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.35538563,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"65","depth":4,"bounds":{"left":0.36535904,"top":0.19952115,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3776596,"top":0.19952115,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.38696808,"top":0.19952115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.39660904,"top":0.19792499,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.4039229,"top":0.19792499,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\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\\Cache;\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 = Cache::get($cacheKey);\n if (is_int($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n $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 Cache::put($cacheKey, $retryAfter, $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 'policy' => $this->parsePolicy($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 $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\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 null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\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->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n//\n// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n// $body = json_decode((string) $response->getBody(), true);\n//\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (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\\Cache;\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 = Cache::get($cacheKey);\n if (is_int($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n $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 Cache::put($cacheKey, $retryAfter, $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 'policy' => $this->parsePolicy($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 $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\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 null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\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->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n//\n// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n// $body = json_decode((string) $response->getBody(), true);\n//\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n// \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (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":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":"19","depth":4,"bounds":{"left":0.6296542,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6409575,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.64827126,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.42885637,"top":0.09736632,"width":0.5711436,"height":0.8818835},"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
9210005049400830551
|
6378616412348221796
|
visual_change
|
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
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
65
1
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\Cache;
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 = Cache::get($cacheKey);
if (is_int($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
$cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Cache::put($cacheKey, $retryAfter, $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($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;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
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->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
//
// $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
// $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
// $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
// $body = json_decode((string) $response->getBody(), true);
//
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
// \Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (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);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16721
|
746
|
34
|
2026-05-11T09:19:21.014664+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778491161014_m1.jpg...
|
CleanShot X
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
1:50
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"1:50","depth":1,"bounds":{"left":0.72256947,"top":0.96055555,"width":0.023611112,"height":0.015555556},"on_screen":true,"role_description":"text"}]...
|
2665301734212010956
|
2665301734212010956
|
visual_change
|
hybrid
|
NULL
|
1:50
SlackFileEditViewGoHistoryWindowHelpPetko Kas 1:50
SlackFileEditViewGoHistoryWindowHelpPetko KashinskiScreen shareChromeFileEditViewHistoryBookmarksProfilesTabWindowHelpWorkGreelScoreandrewilso®Call A→ws.planhat.com/jiminny/home/data-explorer/usagemetricdefD АIKВChatPlayground Al...CalendarData ExplorerEmail ManagerMoreoooasCS Day-to-day -Getting started Guide& Just CS DataDaily OperationsWeekly prepRenewals and UpsellRisk and Churn AnalyticsImplementation -Impl ProjectsTrial Opps (Under Review)Stoyan's clientsELeadership •System ReportsLeadership Operations88Pordonlo Overview (DasnooNPS Report - GregClient Engagement Overview10 Jiminny - Calenda...M GMail• My Calendly - Eve...= PH New UI LoginSearch Jiminny8 Metric -EB DatasetQ PLAYBACK+ Metric6 metricsTypeModelCompany 2• Playback Adoption AvgCalculated MetricsCompany• Playback AdoptionCalculated MetricsCompanyv EndUser 4• JUsers Playback AdoptionCalculated MetricsEndUser• Playback Adoption (Last 7 days)Calculated MetricsEndUser• Playback AdoptionCalculated MetricsEndUserplaybrckVisitedhttps://ws.planhat.com/jiminny/home/data-explorer/usagemetricdef?preview=Us…alol# Support Daily - in 2 h 41 m100% <78• Mon 11 May 12:19:206д Huddle with Petko KashinskiJiminM Inbox=Get Starting with J...QAppsBuildu Users€ NewApps• Chloe Onboarding....+ CX Journey SMB.....8•Mon 11 May 12:19User+Work+E PetkoDescriptionSave as Jiminny defaultResetdis Add chartQ Search fields.Created ByCreated d...Updated d.€ Petkol Petkol Petkol Petko€ PetkoFeatured7 Global fitersP Advanced fiterDec 02, 2024Dec 02, 2024Nov 28, 2024Nov 28, 2024Mar 23, 2026Mar 23, 2026Dec 02, 2024Dec 02, 2024Nov 28, 2024Nov 28, 2024Aggregation modeAvailability in PlanhatBuild PeriodCrestedbCreated dateCreated dateDescriptionFeaturedGroupLast BuitModelNameOrderTypeUpdated ByUpdated datiUpdated datiInvalid formuAl Notes: OffPetko ..&ГА1:49Leave...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
16904
|
755
|
34
|
2026-05-11T09:40:02.433966+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778492402433_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormINavicareCodeFV faVsco.js°9 JY-20725-handl PhostormINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-limitroledey© UserAutomatedReportsController.php© TrackRecordingFileSiz© TrackRecordingSizeEnT ValidateSmitProspectE© SyncRelatedActivityManager.phpAjReportsС) Cпескапакеtгукemotematch.phgW Avatar0 CalendarConference0 Crm>@ Bullhorn>C CloseC Copper( RateLimitException.phpC) Client.php X php ide_ helper.phiC) MatchCrmData.php© CrmObiectsResolver.phc(C) ProviderRateLimiter.php©) PaqinationConfia.phpclass Cuient extends Baseclient imolements Hubspotc ientinterface• A2 A67 V3 ^ V>J Crmobiects07 DecorateActivitv* ochrows BadRequest* Othrows HubspotException• Dummy781782783 CHelpersv h Hubspotpubule tunccion creacemeeuing array spayload. kesponseAccountSvncStrateSendpoint = '/crm/v3/objects/meetings':I W 11>D Actionsa ContactsuncStratedreturn schls->makekequestsendpointmetnod: "Pusl", spayload)"• M lournal1 Metadatal* othrows BadRequestvOpportunitvSvncSt>MConcerns.* othrows HubspotExceotion(c) Hubsnotl actMonoubuic function uodateMeeting(strina Smeetingld. array Soavload): ResponseLog xChanaes 10 fillesTJ0 + → Side-by-side viewer •8 35f036ac app/Services/Crm/Hubspot/Client.phgDo not ignoreHiahliaht wordsyXBB?© HandleHubspotRateLimit.php app/Jobs/Middleware(1HubsootClientintertace.ohoaoo/Services/Crm/Hubsoot© HubspotPaginationService.php app/Services/Crm/Hubspot/PaginationC).liminnvDebuaCommand.nhn ann/Console/Commandsuse HubSpot\Client\ Crm\Pipelines Model\PipelineStaqe:use Hubspot Client Crm Properties Model Propertyuse Hubspot biscovery Discovery:Jiminny Exceptions CrmException:php logging.php configJiminny\Exceptions|SocialAccountTokenInvaLidException:© MatchActivityCrmData.php app/Jobs/CrmJaminny woos crn. Notelbnect©PaginationState.php app/Services/Crm/Hubspot/PaginationJiminny Models. Crm Field:© RateLimitException.php app/ExceptionsJiminny Services Crm BaseCuient:Unversioned Files 9 filesE.env.nikilocal appuse SevenShores Hubsoot Excentions HubsootExcention:=.env.other app- use SevenShores Hubsoot Factory:© CanAccessAiReportsTest.php tests/Unit/PoliciesSevenShores Huhsnot Httn Resnonse:© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/Reduse liminnv Services Crm Hubsnot Pagination HuhsnotPaginationSenvice.Cd fouinan inn nuhlidE ids.txt apdTraw sal query.sal app© SimulateWebhooksCommand.php app/Console/Commands/Crm/HubspotM+ WEBHOOK FILTERING_IMPLEMENTATION.md apd* @phpstan-tupe CrmFieldOption arrayfid:string, label:string, value?:string}olner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)S0 hl• supoont Dally • In zn 20m100% Lz• Mon 11 May 12:40:02AskJiminnyReportActivityServiceTest v+0 ..A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKob.A console [EU]A console [STAGING]accept-encoding"],W19лV"access-control-allow-credentials":["false"]."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-type-options": ["nosniff"],"x-hubspot-correlation-id":("019e02d0-6fd8-7812-bdba-885b7ccb3ee3"]."Set-Cookie":["_cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.107-May-26 14:51:15 GMT: domain=.hubapi.com;: Http0nly: Secure: SameSite=None"]."керогс-10":"1endpolnts""url":nccos:a.nel.cloudtlare.comredorcv4?s=NYAlsVIPorymszorsunxY24Sozk"max_age\":6048005"J,"NEL" :["S"success fraction":0.01."Serven". ["cloudflare"1?}"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab","trace id":"c7ab8365-903f-46d4-9403-0e5b551e3545";CascadeHubspot Rate Limitbphin DeletecrmEntitvuralt::hand lexctvitles$activityIdsWithCrmId = $activities->filter(fn (Activity Sa) = Sa->hasCrmProviderId())→>pluck('id')→all;if (! empty($activityIdsWithCrmld))each (array_chunk($activityIdsWithCrmId, 100) as $chunk) {VerifvActivitiesCrnTasks.loh::disoatch(Schunk)Combined with HubSpot's batch read endpoint ( POST /crm/v3/objects/tasks/batch/read ), 100 verifications = 1 APl call. 100x throughput improvement on theverity pathEffort: medium (new bulk job class + batch read implementation). Impact: 100xOption 3: Move the cascade out of the transactionCurrently the trait dispatches VerifvAct ivitvCrmTaskJob inside the parent's Sdb→>transaction(...) block (seeAsk anything (&AL)+ <> CodeClaude Opus 4.7 Mediumuse HubSpot\ Client\ Crm\Pipelines Model\PipelineStage:use HubSpot Client\ Crm\Properties Model\Property:use HubSpot\ Discovery Discoveryuse Jiminny Exceptions CrmException:use Jiminny Exceptions RateLim1tExceptionuse Jiminny\Exceptions|SocialAccountTokenInvalidException:use Jaminny woos crm Notelonect:use Jiminnv|Models\Crm\Field:use Jiminny Services Crm BaseCuient:use SevenShores Hubsoot Excentions HubsootExcention:use SevenShores\Hubspot\Factory:use SevenShores Huhsnot Httn Resnonseuse Jiminny\Services\Crm\Hubspot \Pagination \HubspotPaginationService;use Tlluminate Sunnont Facades Redis:luse Throwahle* @phpstan-tupe CrmFieldOption arrayfid:string, label:string, value?:string}6 differencesW Windsurf Toams 776-10UTF.8|io 4 spaces...
|
NULL
|
-5922107947485529737
|
NULL
|
click
|
ocr
|
NULL
|
PhostormINavicareCodeFV faVsco.js°9 JY-20725-handl PhostormINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-limitroledey© UserAutomatedReportsController.php© TrackRecordingFileSiz© TrackRecordingSizeEnT ValidateSmitProspectE© SyncRelatedActivityManager.phpAjReportsС) Cпескапакеtгукemotematch.phgW Avatar0 CalendarConference0 Crm>@ Bullhorn>C CloseC Copper( RateLimitException.phpC) Client.php X php ide_ helper.phiC) MatchCrmData.php© CrmObiectsResolver.phc(C) ProviderRateLimiter.php©) PaqinationConfia.phpclass Cuient extends Baseclient imolements Hubspotc ientinterface• A2 A67 V3 ^ V>J Crmobiects07 DecorateActivitv* ochrows BadRequest* Othrows HubspotException• Dummy781782783 CHelpersv h Hubspotpubule tunccion creacemeeuing array spayload. kesponseAccountSvncStrateSendpoint = '/crm/v3/objects/meetings':I W 11>D Actionsa ContactsuncStratedreturn schls->makekequestsendpointmetnod: "Pusl", spayload)"• M lournal1 Metadatal* othrows BadRequestvOpportunitvSvncSt>MConcerns.* othrows HubspotExceotion(c) Hubsnotl actMonoubuic function uodateMeeting(strina Smeetingld. array Soavload): ResponseLog xChanaes 10 fillesTJ0 + → Side-by-side viewer •8 35f036ac app/Services/Crm/Hubspot/Client.phgDo not ignoreHiahliaht wordsyXBB?© HandleHubspotRateLimit.php app/Jobs/Middleware(1HubsootClientintertace.ohoaoo/Services/Crm/Hubsoot© HubspotPaginationService.php app/Services/Crm/Hubspot/PaginationC).liminnvDebuaCommand.nhn ann/Console/Commandsuse HubSpot\Client\ Crm\Pipelines Model\PipelineStaqe:use Hubspot Client Crm Properties Model Propertyuse Hubspot biscovery Discovery:Jiminny Exceptions CrmException:php logging.php configJiminny\Exceptions|SocialAccountTokenInvaLidException:© MatchActivityCrmData.php app/Jobs/CrmJaminny woos crn. Notelbnect©PaginationState.php app/Services/Crm/Hubspot/PaginationJiminny Models. Crm Field:© RateLimitException.php app/ExceptionsJiminny Services Crm BaseCuient:Unversioned Files 9 filesE.env.nikilocal appuse SevenShores Hubsoot Excentions HubsootExcention:=.env.other app- use SevenShores Hubsoot Factory:© CanAccessAiReportsTest.php tests/Unit/PoliciesSevenShores Huhsnot Httn Resnonse:© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/Reduse liminnv Services Crm Hubsnot Pagination HuhsnotPaginationSenvice.Cd fouinan inn nuhlidE ids.txt apdTraw sal query.sal app© SimulateWebhooksCommand.php app/Console/Commands/Crm/HubspotM+ WEBHOOK FILTERING_IMPLEMENTATION.md apd* @phpstan-tupe CrmFieldOption arrayfid:string, label:string, value?:string}olner Code will hoin INF to underctand vour Laravel ann code II Generate II Don't Show Anvmore (todav Q•08)S0 hl• supoont Dally • In zn 20m100% Lz• Mon 11 May 12:40:02AskJiminnyReportActivityServiceTest v+0 ..A SF (jiminny@localhost]4 HS_local (jiminny@localhost]# console [PKob.A console [EU]A console [STAGING]accept-encoding"],W19лV"access-control-allow-credentials":["false"]."server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfr;desc=|"9f80deb8e7c6dc3a-IAD\""],"x-content-type-options": ["nosniff"],"x-hubspot-correlation-id":("019e02d0-6fd8-7812-bdba-885b7ccb3ee3"]."Set-Cookie":["_cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.107-May-26 14:51:15 GMT: domain=.hubapi.com;: Http0nly: Secure: SameSite=None"]."керогс-10":"1endpolnts""url":nccos:a.nel.cloudtlare.comredorcv4?s=NYAlsVIPorymszorsunxY24Sozk"max_age\":6048005"J,"NEL" :["S"success fraction":0.01."Serven". ["cloudflare"1?}"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab","trace id":"c7ab8365-903f-46d4-9403-0e5b551e3545";CascadeHubspot Rate Limitbphin DeletecrmEntitvuralt::hand lexctvitles$activityIdsWithCrmId = $activities->filter(fn (Activity Sa) = Sa->hasCrmProviderId())→>pluck('id')→all;if (! empty($activityIdsWithCrmld))each (array_chunk($activityIdsWithCrmId, 100) as $chunk) {VerifvActivitiesCrnTasks.loh::disoatch(Schunk)Combined with HubSpot's batch read endpoint ( POST /crm/v3/objects/tasks/batch/read ), 100 verifications = 1 APl call. 100x throughput improvement on theverity pathEffort: medium (new bulk job class + batch read implementation). Impact: 100xOption 3: Move the cascade out of the transactionCurrently the trait dispatches VerifvAct ivitvCrmTaskJob inside the parent's Sdb→>transaction(...) block (seeAsk anything (&AL)+ <> CodeClaude Opus 4.7 Mediumuse HubSpot\ Client\ Crm\Pipelines Model\PipelineStage:use HubSpot Client\ Crm\Properties Model\Property:use HubSpot\ Discovery Discoveryuse Jiminny Exceptions CrmException:use Jiminny Exceptions RateLim1tExceptionuse Jiminny\Exceptions|SocialAccountTokenInvalidException:use Jaminny woos crm Notelonect:use Jiminnv|Models\Crm\Field:use Jiminny Services Crm BaseCuient:use SevenShores Hubsoot Excentions HubsootExcention:use SevenShores\Hubspot\Factory:use SevenShores Huhsnot Httn Resnonseuse Jiminny\Services\Crm\Hubspot \Pagination \HubspotPaginationService;use Tlluminate Sunnont Facades Redis:luse Throwahle* @phpstan-tupe CrmFieldOption arrayfid:string, label:string, value?:string}6 differencesW Windsurf Toams 776-10UTF.8|io 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
17195
|
766
|
34
|
2026-05-11T10:10:38.198130+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778494238198_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
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...
|
[{"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}]...
|
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
iTerm2• 0ShellEditViewSessionScriptsProfilesWindowHelp• Support Daily - in 1h 50 mDEV (docker)DOCKERO ₴1DEV (docker)H82APP (-zsh)-zsh-zsh100%8• Mon 11 May 13:10:37181screenpipe"0 ₴6configcachecompiledeventsroutesviewsworker-crm-update:worker-crm-update_00: stoppedjiminny-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-5:jiminny-worker-processing-5_00:stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-download:worker-download_00: stoppedworker-nudges:worker-nudges_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-emails:worker-emails_00: stoppedworker-es-update:worker-es-update_00: stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_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# l8856.34ms DONE11.98ms DONE2.10ms DONE5.31ms DONE2.90ms DONE13.11ms DONEDEV...
|
17193
|
NULL
|
NULL
|
NULL
|
|
17264
|
769
|
34
|
2026-05-11T10:15:12.370767+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778494512370_m2.jpg...
|
PhpStorm
|
faVsco.js – HS_local [jiminny@localhost]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavicareCodeLaravelKeractorWindowFV f PhostormVIewINavicareCodeLaravelKeractorWindowFV faVsco.js°9 JY-20725-handle-HS-search-rate-limitProiect vC) TrackAutomated ReportGeneratedzventonp© PlaybackController.phpM-licenses.mo© SyncRelatedActivityManager.php© HubspotSyncStrategyBase.phpT SyncCrmEntitiesTrait.phpCachedcmmservicebecorator.ong© ProspectCache.phpIMMakerle0 package-lock.json= ohostan.neon.distE phpstan-baseline.neon<> phounit.xmliT6 raw_sql_query.sqMLRSADMS mo© VerifyActivityCrmTaskJob.php© CrmActivityService.php* RateLimitexception.pngpnp_ide._nelper.phg© ProviderRateLimiter.phpclass JiminnyDebuqcommand extends Commandt sonar-project.properties= test.py<> Untitled Diagram.xmlus vetur.config.jsMIWERHOOK FILTERING IMPLEMI 369> (h External Libraries=0 Scratches and Consolesv @ Database ConsolesV AEUA console [EU]A DEAL RISKS [EU]&DI LUIALu Lu& iminny@localhostconsole liminnvalocalho379DlminnvolocalhostlA HS local fiiminnv@localhc 38€A SF [iiminny@localhostlA zoho dev liiminnv@localh 382V APRONServicac+o cv M Datahacc• ДEU# consolev & liminny@localnostA HS local 4 gASFV APRODA consoloASTAGING« console Dockerprivate function natelamutScrmService->syncOpportunity('374720564'):ScrmService->matchByName('Robot'):private function simulateMatchActivityStorm(int SteamId = 2, int $count = 100): voidsteam = leam::rindsteamla*Sconfig = $team->qetCrmConfiqurationO:Sactivities = Activitv::querv@l->wherel co->orderByDesc( column: 'id')'crm configuration id'. Sconfig->qetIdO)->U1mit(Scount)->qetosSthis->info( string: "Dispatchina «Sactivities->counto* MatchActivitvermdata ñoos (portal= Sconfia->getido?"):Outputfß Result 1 x(0 W 4 rows -Muser_id YMemail [EMAIL].com408148 (owner)[EMAIL]@jiminny.onmicrosoft.com1372Ohuospot/serwice.onp©MatchCrmData.pnpT. DeleteCrmEntitylrait.ong© Job.php45 A133 M11 ^suppont Dally • In Th 40m100% Lz• Mon 11 May 13:15:12HandleHubspotRateLimitTest v= custom.log= laravel.log4 SF [jiminny@localhost]& HS_local [jiminny@localhost] XA console [Pkol)* console [eu)& console [STAGINGISo jiminny06 41 Y6 ^select * tron accvity_summary-logs where aculvity.1o = 0000/4select * from sidekick settings:select * from default activity types:select * from crm tleld data where activity 1d = 1225:select * from crm_layouts where crm_configuration_1d = 2;SELE * FROM com lavout entitles WHERE crm Lavout 10IN 055404select * from crm_fields where crm_configuration_id = 11 and object_type = 'event';SELEC * FROM com field values WHERE crm field id IN 01455.14500•|SELEC * FROM com field data WHERE crm lavout entity 1d = 9715SELEC * FROM com field data WHERE crm lavout entity id IN 16494.6495.6496.6497.6498.6499) 1SSISCTCONCAT(u.id, CASE WHEN v.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_idsa.*,t.owner_id FROM social_accounts saJOIN users uon u.id = sa.sociable_idJOIN teams t 1..n<->1: on t.id = u.team_idWHERE u.team id = 2 and sa.provider = 'hubspot':€ : -GSV vM sociable id YMorovider user id Y : Morovider user token YMprovider refresh token Y÷ Mexpires YM refresh token expire19 5760674C.Jf_rMuaMxTe01NOM18k0EwrAhEACAcCFATSC00dA0EBA0EBA0EGGTKJ#ATq0S3fAiÄTrAIvFKFcEwV1WK3@AtibFBAvKW_v0WvS0#5CU1AvXvRATCsCM0AIG……ba81e14f-07c4-4a7b-aad1-9c82278eff3e175948400289 65235871CNyZprThMxIYQLNQML8kQEwrAgsACAkWEgkEHgEBAQMHGIKJjAIgn9eNHyjSrAIyFFs_EMXM0-bsmbd9No45XiQ4WDUu0i9CU1AyXyRATCsCIgAIGQZxThwBA...73266313-2131-432a-9hhh-1ceScde81h3cl1778494573148 27225182CKe18LThMxIZQLNOML8k0EwrAgwACAkUAhIJBB4BA0EDBxiCiYwCIN7Y_ 0wo0qwCMhQe-Zr1T17lL-CtoXvt-04wWFoiyZijoyQLNQM18k0EwrAiUACBkGawEFThwBARIBAQEEATEEAQEBAQEBA0EBAQUBE@9BAQEBAYLCFJ3HyBJxzUEzcmad4nh_1ZASsUYTSqNuYTFSAFoAYAB03t206 60875738CNSs_quaMxIZQLNQMl8kQEwrAgwACAkUAhIJBB4BAQEDBxіCiYwCINгHgx0o06wCMhTXUSuJboYd®S8vHsYuXKTIVnNjXToyQLNQML8kQEwгAiUACBkGawEFT…46affdf3-e0bc-4fc9-b8ae-e29acbb275cc1759418226WN Windsurf Toams 10-10UITF.R4 spaces O...
|
NULL
|
7881942405369344754
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavicareCodeLaravelKeractorWindowFV f PhostormVIewINavicareCodeLaravelKeractorWindowFV faVsco.js°9 JY-20725-handle-HS-search-rate-limitProiect vC) TrackAutomated ReportGeneratedzventonp© PlaybackController.phpM-licenses.mo© SyncRelatedActivityManager.php© HubspotSyncStrategyBase.phpT SyncCrmEntitiesTrait.phpCachedcmmservicebecorator.ong© ProspectCache.phpIMMakerle0 package-lock.json= ohostan.neon.distE phpstan-baseline.neon<> phounit.xmliT6 raw_sql_query.sqMLRSADMS mo© VerifyActivityCrmTaskJob.php© CrmActivityService.php* RateLimitexception.pngpnp_ide._nelper.phg© ProviderRateLimiter.phpclass JiminnyDebuqcommand extends Commandt sonar-project.properties= test.py<> Untitled Diagram.xmlus vetur.config.jsMIWERHOOK FILTERING IMPLEMI 369> (h External Libraries=0 Scratches and Consolesv @ Database ConsolesV AEUA console [EU]A DEAL RISKS [EU]&DI LUIALu Lu& iminny@localhostconsole liminnvalocalho379DlminnvolocalhostlA HS local fiiminnv@localhc 38€A SF [iiminny@localhostlA zoho dev liiminnv@localh 382V APRONServicac+o cv M Datahacc• ДEU# consolev & liminny@localnostA HS local 4 gASFV APRODA consoloASTAGING« console Dockerprivate function natelamutScrmService->syncOpportunity('374720564'):ScrmService->matchByName('Robot'):private function simulateMatchActivityStorm(int SteamId = 2, int $count = 100): voidsteam = leam::rindsteamla*Sconfig = $team->qetCrmConfiqurationO:Sactivities = Activitv::querv@l->wherel co->orderByDesc( column: 'id')'crm configuration id'. Sconfig->qetIdO)->U1mit(Scount)->qetosSthis->info( string: "Dispatchina «Sactivities->counto* MatchActivitvermdata ñoos (portal= Sconfia->getido?"):Outputfß Result 1 x(0 W 4 rows -Muser_id YMemail [EMAIL].com408148 (owner)[EMAIL]@jiminny.onmicrosoft.com1372Ohuospot/serwice.onp©MatchCrmData.pnpT. DeleteCrmEntitylrait.ong© Job.php45 A133 M11 ^suppont Dally • In Th 40m100% Lz• Mon 11 May 13:15:12HandleHubspotRateLimitTest v= custom.log= laravel.log4 SF [jiminny@localhost]& HS_local [jiminny@localhost] XA console [Pkol)* console [eu)& console [STAGINGISo jiminny06 41 Y6 ^select * tron accvity_summary-logs where aculvity.1o = 0000/4select * from sidekick settings:select * from default activity types:select * from crm tleld data where activity 1d = 1225:select * from crm_layouts where crm_configuration_1d = 2;SELE * FROM com lavout entitles WHERE crm Lavout 10IN 055404select * from crm_fields where crm_configuration_id = 11 and object_type = 'event';SELEC * FROM com field values WHERE crm field id IN 01455.14500•|SELEC * FROM com field data WHERE crm lavout entity 1d = 9715SELEC * FROM com field data WHERE crm lavout entity id IN 16494.6495.6496.6497.6498.6499) 1SSISCTCONCAT(u.id, CASE WHEN v.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_idsa.*,t.owner_id FROM social_accounts saJOIN users uon u.id = sa.sociable_idJOIN teams t 1..n<->1: on t.id = u.team_idWHERE u.team id = 2 and sa.provider = 'hubspot':€ : -GSV vM sociable id YMorovider user id Y : Morovider user token YMprovider refresh token Y÷ Mexpires YM refresh token expire19 5760674C.Jf_rMuaMxTe01NOM18k0EwrAhEACAcCFATSC00dA0EBA0EBA0EGGTKJ#ATq0S3fAiÄTrAIvFKFcEwV1WK3@AtibFBAvKW_v0WvS0#5CU1AvXvRATCsCM0AIG……ba81e14f-07c4-4a7b-aad1-9c82278eff3e175948400289 65235871CNyZprThMxIYQLNQML8kQEwrAgsACAkWEgkEHgEBAQMHGIKJjAIgn9eNHyjSrAIyFFs_EMXM0-bsmbd9No45XiQ4WDUu0i9CU1AyXyRATCsCIgAIGQZxThwBA...73266313-2131-432a-9hhh-1ceScde81h3cl1778494573148 27225182CKe18LThMxIZQLNOML8k0EwrAgwACAkUAhIJBB4BA0EDBxiCiYwCIN7Y_ 0wo0qwCMhQe-Zr1T17lL-CtoXvt-04wWFoiyZijoyQLNQM18k0EwrAiUACBkGawEFThwBARIBAQEEATEEAQEBAQEBA0EBAQUBE@9BAQEBAYLCFJ3HyBJxzUEzcmad4nh_1ZASsUYTSqNuYTFSAFoAYAB03t206 60875738CNSs_quaMxIZQLNQMl8kQEwrAgwACAkUAhIJBB4BAQEDBxіCiYwCINгHgx0o06wCMhTXUSuJboYd®S8vHsYuXKTIVnNjXToyQLNQML8kQEwгAiUACBkGawEFT…46affdf3-e0bc-4fc9-b8ae-e29acbb275cc1759418226WN Windsurf Toams 10-10UITF.R4 spaces O...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
17272
|
768
|
34
|
2026-05-11T10:15:26.648948+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778494526648_m1.jpg...
|
Notion Calendar
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2•ShellEditViewSessionScriptsProfilesWindowHe iTerm2•ShellEditViewSessionScriptsProfilesWindowHelplih§ Support Daily • in 1h 45 mDOCKERC *1DEV (docker)H82APP (-zsh)DEV (docker)X3-zshl84-zsh100% C8• Mon 11 May 13:15:26181screenpipe"0 ₴6configcachecompiledeventsroutesviewsjiminny-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-5:jiminny-worker-processing-5_00:stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00: stoppedworker-emails:worker-emails_00: stoppedworker-nudges:worker-nudges_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00: stoppedworker-crm-sync:worker-crm-sync_00: stoppedartisan-schedule:artisan-schedule_00: stoppedworker-es-update:worker-es-update_00: stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_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: debugll88510.53ms DONE128.25ms DONE1.73ms DONE1.07ms DONE1.45ms DONE5.46ms DONEDEV...
|
NULL
|
-7415793159978021551
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2•ShellEditViewSessionScriptsProfilesWindowHe iTerm2•ShellEditViewSessionScriptsProfilesWindowHelplih§ Support Daily • in 1h 45 mDOCKERC *1DEV (docker)H82APP (-zsh)DEV (docker)X3-zshl84-zsh100% C8• Mon 11 May 13:15:26181screenpipe"0 ₴6configcachecompiledeventsroutesviewsjiminny-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-5:jiminny-worker-processing-5_00:stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00: stoppedworker-emails:worker-emails_00: stoppedworker-nudges:worker-nudges_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00: stoppedworker-crm-sync:worker-crm-sync_00: stoppedartisan-schedule:artisan-schedule_00: stoppedworker-es-update:worker-es-update_00: stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_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: debugll88510.53ms DONE128.25ms DONE1.73ms DONE1.07ms DONE1.45ms DONE5.46ms DONEDEV...
|
17269
|
NULL
|
NULL
|
NULL
|
|
17379
|
771
|
34
|
2026-05-11T10:20:00.073353+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778494800073_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
True
|
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,
'policy' => $this->parsePolicy($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;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
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->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
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
Received 429 from API
New Line
Match Case
Words...
|
[{"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.5518617,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"bounds":{"left":0.5618351,"top":0.17478053,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.5738032,"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.5834442,"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.59075797,"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 'policy' => $this->parsePolicy($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 $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\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 null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\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->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n 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 'policy' => $this->parsePolicy($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 $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\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 null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\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->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n 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.60206115,"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.6146942,"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":"Received 429 from API","depth":4,"bounds":{"left":0.6256649,"top":0.07980846,"width":0.0631649,"height":0.015961692},"on_screen":true,"value":"Received 429 from API","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.6978058,"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.7077792,"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.71642286,"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}]...
|
-2769416735119127708
|
5225837844252985700
|
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,
'policy' => $this->parsePolicy($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;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
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->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
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
Received 429 from API
New Line
Match Case
Words...
|
17376
|
NULL
|
NULL
|
NULL
|
|
17463
|
774
|
34
|
2026-05-11T10:24:03.948227+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778495043948_m2.jpg...
|
Firefox
|
Screenpipe — Archive — Personal
|
True
|
app.screenpipe.lakylak.xyz
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
SECONDLY
Search
AND also
second required term — both must appear in same result (optional)
Source
App
Date
dd
/
mm
/
yyyy
Calendar
(blank = all dates)
From
--
:
--
To
--
:
--
Only apps
any app (blank = all)
▾
Skip apps
none skipped
▾
FTS tip: single words work best · "exact phrase" · term1 OR term2 · use AND also for required second term · times are in your local timezone · click any result to expand
49 results
▶ video
7 May 19:25
Screen
PhpStorm
/ faVsco.js – Client.php
⏱ Timeline
...true) ??
:SpolicyName = $body
'policyName'
?? Sbody
'policy'
?? null:Map pollcy names to retry delaysif (SpolicvName === 'TEN
SECONDLY
_ROLLING' |I SpolicvName === 'ten
secondly
rolling') {
… (click to expand)
▶ video
7 May 19:10
Screen
PhpStorm
/ faVsco.js – Client.php
⏱ Timeline
...true) ??
:Snolievlane = Sbod/LUpoltiev/lane:1 22 Shody
LnolieyL1L.22 п11rao nolicy names to retry delav1f SpoLicvName ==='TEN
SECONDLY
ROLLING' |I SpolicvName === 'ten
secondly
rolling') {Le
… (click to expand)
7 May 17:24
Typed
Firefox
text
⏱ Timeline
.
7 May 17:23
Typed
Firefox
text
⏱ Timeline
7 May 17:22
Typed
Firefox
text
⏱ Timeline
.
7 May 17:22
Typed
Firefox
text
⏱ Timeline
'
7 May 17:21
Typed
Firefox
text
⏱ Timeline
7 May 17:20
Typed
Firefox
text
⏱ Timeline
7 May 17:19
Typed
Firefox
text
⏱ Timeline
7 May 17:17
Typed
Firefox
text
⏱ Timeline
7 May 17:17
Typed
Firefox
text
⏱ Timeline
$
7 May 17:17
Typed
Firefox
text
⏱ Timeline
;
7 May 17:17
Typed
Firefox
text
⏱ Timeline
=
7 May 17:16
Typed
Firefox
text
⏱ Timeline
:
7 May 17:16
Typed
Firefox
text
⏱ Timeline
7 May 17:15
Typed
Firefox
text
⏱ Timeline
.
7 May 17:15
Typed
Firefox
text
⏱ Timeline
7 May 17:14
Typed
Firefox
text
⏱ Timeline
7 May 17:14
Typed
Firefox
text
⏱ Timeline
.
7 May 17:10
Typed
Firefox
text
⏱ Timeline
7 May 17:09
Typed
Firefox
text
⏱ Timeline
7 May 17:08
Typed
Firefox
text
⏱ Timeline
7 May 17:07
Typed
Firefox
text
⏱ Timeline
7 May 14:13
Typed
Claude
text
⏱ Timeline
secondly
7 May 10:58
Typed
clipboard
⏱ Timeline
...search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your
secondly
limit.","errorType":"RATE_LIMIT","correlationId":"019dffc4-4 (truncated...)
7 May 10:41
Typed
clipboard
⏱ Timeline
...search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your
secondly
limit.","errorType":"RATE_LIMIT","correlationId":"019dffc4-4 (truncated...)
7 May 10:41
Typed
Firefox
text
⏱ Timeline
7 May 10:41
Typed
Firefox
text
⏱ Timeline
)
7 May 10:41
Typed
Firefox
text
⏱ Timeline
,
7 May 10:41
Typed
Firefox
text
⏱ Timeline
(
7 May 10:38
Typed
Firefox
text
⏱ Timeline
▶ video
22 Apr 12:58
Screen
Firefox
/ Jiminny — Work
app.staging.jiminny.com/ai-reports/pdf/582d4b50-8cd3-42a9-9819-d676ff8f3b43...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.28823137,"top":0.0518755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.30152926,"top":0.06304868,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.28823137,"top":0.08459697,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.30152926,"top":0.09577015,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.38962767,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.29105717,"top":0.118914604,"width":0.108211435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.29105717,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.3020279,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.3131649,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.32430187,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.33543882,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe [archive.db · 12323.6MB]","depth":7,"bounds":{"left":0.4085771,"top":0.061452515,"width":0.06698803,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"bounds":{"left":0.4085771,"top":0.06304868,"width":0.027759308,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[archive.db · 12323.6MB]","depth":9,"bounds":{"left":0.43766624,"top":0.06703911,"width":0.037898935,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"bounds":{"left":0.48021942,"top":0.059856344,"width":0.024767287,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"bounds":{"left":0.5056516,"top":0.059856344,"width":0.023769947,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"bounds":{"left":0.53008646,"top":0.059856344,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"No audio data in this database","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Work Report","depth":7,"bounds":{"left":0.55169547,"top":0.059856344,"width":0.03507314,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Timetable","depth":7,"bounds":{"left":0.5874335,"top":0.059856344,"width":0.029753989,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"bounds":{"left":0.6178524,"top":0.059856344,"width":0.034075797,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"bounds":{"left":0.93849736,"top":0.0650439,"width":0.008144947,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07","depth":9,"bounds":{"left":0.9552859,"top":0.06464485,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"bounds":{"left":0.96110374,"top":0.06464485,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":9,"bounds":{"left":0.9644282,"top":0.06464485,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"bounds":{"left":0.970246,"top":0.06464485,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"bounds":{"left":0.9737367,"top":0.06464485,"width":0.009474734,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"bounds":{"left":0.98454124,"top":0.0650439,"width":0.0051529254,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"SECONDLY","depth":8,"bounds":{"left":0.4965093,"top":0.11412609,"width":0.38131648,"height":0.025538707},"on_screen":true,"value":"SECONDLY","help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":8,"bounds":{"left":0.88048536,"top":0.11412609,"width":0.024933511,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AND also","depth":9,"bounds":{"left":0.4965093,"top":0.15522745,"width":0.01662234,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"second required term — both must appear in same result (optional)","depth":8,"bounds":{"left":0.51579124,"top":0.14764565,"width":0.38962767,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Source","depth":9,"bounds":{"left":0.4965093,"top":0.18754987,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"App","depth":9,"bounds":{"left":0.58427525,"top":0.18754987,"width":0.006981383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date","depth":9,"bounds":{"left":0.6431183,"top":0.18754987,"width":0.008144947,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dd","depth":10,"bounds":{"left":0.65791225,"top":0.18715084,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"bounds":{"left":0.66373,"top":0.18715084,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mm","depth":10,"bounds":{"left":0.6672208,"top":0.18715084,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"bounds":{"left":0.67287236,"top":0.18715084,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"yyyy","depth":10,"bounds":{"left":0.67636305,"top":0.18715084,"width":0.009640957,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":9,"bounds":{"left":0.6871675,"top":0.18754987,"width":0.005319149,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"(blank = all dates)","depth":9,"bounds":{"left":0.69863695,"top":0.18794893,"width":0.028756648,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"From","depth":9,"bounds":{"left":0.7300532,"top":0.18754987,"width":0.008976064,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"bounds":{"left":0.7456782,"top":0.18715084,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"bounds":{"left":0.7513298,"top":0.18715084,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"bounds":{"left":0.75482047,"top":0.18715084,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To","depth":9,"bounds":{"left":0.7742686,"top":0.18754987,"width":0.004155585,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"bounds":{"left":0.78507316,"top":0.18715084,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"bounds":{"left":0.79072475,"top":0.18715084,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"bounds":{"left":0.79421544,"top":0.18715084,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Only apps","depth":9,"bounds":{"left":0.4965093,"top":0.21588188,"width":0.017453458,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"any app (blank = all)","depth":11,"bounds":{"left":0.51961434,"top":0.2150838,"width":0.038065158,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▾","depth":11,"bounds":{"left":0.5718085,"top":0.21628092,"width":0.0016622341,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Skip apps","depth":9,"bounds":{"left":0.5817819,"top":0.21588188,"width":0.017121011,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"none skipped","depth":11,"bounds":{"left":0.60455453,"top":0.2150838,"width":0.025265958,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▾","depth":11,"bounds":{"left":0.65674865,"top":0.21628092,"width":0.0016622341,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FTS tip: single words work best · \"exact phrase\" · term1 OR term2 · use AND also for required second term · times are in your local timezone · click any result to expand","depth":9,"bounds":{"left":0.4965093,"top":0.23902634,"width":0.29055852,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"49 results","depth":10,"bounds":{"left":0.4978391,"top":0.29209897,"width":0.017453458,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▶ video","depth":10,"bounds":{"left":0.50964093,"top":0.3367917,"width":0.012300532,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 19:25","depth":11,"bounds":{"left":0.5340758,"top":0.32043096,"width":0.021110373,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screen","depth":11,"bounds":{"left":0.55851066,"top":0.32202715,"width":0.010139627,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PhpStorm","depth":12,"bounds":{"left":0.57130986,"top":0.32043096,"width":0.01861702,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ faVsco.js – Client.php","depth":11,"bounds":{"left":0.5909242,"top":0.32043096,"width":0.039893616,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.31923383,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"...true) ??","depth":11,"bounds":{"left":0.5340758,"top":0.339585,"width":0.020279255,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":SpolicyName = $body","depth":11,"bounds":{"left":0.55502,"top":0.339585,"width":0.045545213,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'policyName'","depth":12,"bounds":{"left":0.6008976,"top":0.339585,"width":0.026097074,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?? Sbody","depth":11,"bounds":{"left":0.62732714,"top":0.339585,"width":0.019614361,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'policy'","depth":12,"bounds":{"left":0.64727396,"top":0.339585,"width":0.014461436,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?? null:Map pollcy names to retry delaysif (SpolicvName === 'TEN","depth":11,"bounds":{"left":0.66206783,"top":0.339585,"width":0.1349734,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SECONDLY","depth":12,"bounds":{"left":0.79737365,"top":0.339585,"width":0.022772606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"_ROLLING' |I SpolicvName === 'ten","depth":11,"bounds":{"left":0.82047874,"top":0.339585,"width":0.07263963,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"secondly","depth":12,"bounds":{"left":0.5344083,"top":0.35514766,"width":0.018118352,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"rolling') {","depth":11,"bounds":{"left":0.55285907,"top":0.35514766,"width":0.019281914,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"… (click to expand)","depth":11,"bounds":{"left":0.57214093,"top":0.35514766,"width":0.038231384,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▶ video","depth":10,"bounds":{"left":0.50964093,"top":0.40901837,"width":0.012300532,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 19:10","depth":11,"bounds":{"left":0.5340758,"top":0.3926576,"width":0.020611702,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screen","depth":11,"bounds":{"left":0.55801195,"top":0.3942538,"width":0.010139627,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PhpStorm","depth":12,"bounds":{"left":0.57081115,"top":0.3926576,"width":0.01861702,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ faVsco.js – Client.php","depth":11,"bounds":{"left":0.59042555,"top":0.3926576,"width":0.039893616,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.3914605,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"...true) ??","depth":11,"bounds":{"left":0.5340758,"top":0.41181165,"width":0.020279255,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":Snolievlane = Sbod/LUpoltiev/lane:1 22 Shody","depth":11,"bounds":{"left":0.55502,"top":0.41181165,"width":0.09424867,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LnolieyL1L.22 п11rao nolicy names to retry delav1f SpoLicvName ==='TEN","depth":12,"bounds":{"left":0.64960104,"top":0.41181165,"width":0.14943483,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SECONDLY","depth":13,"bounds":{"left":0.7993683,"top":0.41181165,"width":0.022772606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ROLLING' |I SpolicvName === 'ten","depth":12,"bounds":{"left":0.8224734,"top":0.41181165,"width":0.07014628,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"secondly","depth":13,"bounds":{"left":0.5344083,"top":0.4273743,"width":0.018118352,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"rolling') {Le","depth":12,"bounds":{"left":0.55285907,"top":0.4273743,"width":0.024102394,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"… (click to expand)","depth":12,"bounds":{"left":0.57696146,"top":0.4273743,"width":0.038065158,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:24","depth":11,"bounds":{"left":0.5008311,"top":0.46488428,"width":0.020777926,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.5249335,"top":0.46648043,"width":0.008976064,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.53673536,"top":0.46488428,"width":0.012799202,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.5505319,"top":0.46568236,"width":0.006150266,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.46368715,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".","depth":11,"bounds":{"left":0.5008311,"top":0.4840383,"width":0.0013297872,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:23","depth":11,"bounds":{"left":0.5008311,"top":0.5215483,"width":0.020777926,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.5249335,"top":0.5231444,"width":0.008976064,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.5365692,"top":0.5215483,"width":0.012965426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.5505319,"top":0.5223464,"width":0.006150266,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.5203512,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:22","depth":11,"bounds":{"left":0.5008311,"top":0.56264967,"width":0.020777926,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.5249335,"top":0.5642458,"width":0.008976064,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.5365692,"top":0.56264967,"width":0.012799202,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.5503657,"top":0.5634477,"width":0.006150266,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.5614525,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".","depth":11,"bounds":{"left":0.5008311,"top":0.5818037,"width":0.0013297872,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:22","depth":11,"bounds":{"left":0.5008311,"top":0.61931366,"width":0.020777926,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.5249335,"top":0.6209098,"width":0.008976064,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.5365692,"top":0.61931366,"width":0.012799202,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.5503657,"top":0.6201117,"width":0.006150266,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.6181165,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"'","depth":11,"bounds":{"left":0.5008311,"top":0.63846767,"width":0.0013297872,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:21","depth":11,"bounds":{"left":0.5008311,"top":0.67597765,"width":0.020279255,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.52443486,"top":0.6775738,"width":0.008976064,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.53607047,"top":0.67597765,"width":0.012799202,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.54986703,"top":0.67677575,"width":0.006150266,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.67478055,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:20","depth":11,"bounds":{"left":0.5008311,"top":0.717079,"width":0.020777926,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.5249335,"top":0.7186752,"width":0.008976064,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.53673536,"top":0.717079,"width":0.012799202,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.5505319,"top":0.7178771,"width":0.006150266,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.7158819,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:19","depth":11,"bounds":{"left":0.5008311,"top":0.7581804,"width":0.020279255,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.52443486,"top":0.75977653,"width":0.008976064,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.53607047,"top":0.7581804,"width":0.012965426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.5500333,"top":0.7589784,"width":0.006150266,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.7569832,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:17","depth":11,"bounds":{"left":0.5008311,"top":0.7992817,"width":0.020113032,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.5242686,"top":0.80087787,"width":0.008976064,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.5359042,"top":0.7992817,"width":0.012799202,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.5497008,"top":0.8000798,"width":0.006150266,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.7980846,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:17","depth":11,"bounds":{"left":0.5008311,"top":0.84038305,"width":0.020113032,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.5242686,"top":0.84197927,"width":0.008976064,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.5359042,"top":0.84038305,"width":0.012799202,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.5497008,"top":0.84118116,"width":0.006150266,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.83918595,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"$","depth":11,"bounds":{"left":0.5008311,"top":0.8595371,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:17","depth":11,"bounds":{"left":0.5008311,"top":0.8970471,"width":0.020113032,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.5242686,"top":0.89864326,"width":0.008976064,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.5359042,"top":0.8970471,"width":0.012799202,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.5497008,"top":0.89784515,"width":0.006150266,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.89584994,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":";","depth":11,"bounds":{"left":0.5008311,"top":0.9162011,"width":0.0013297872,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:17","depth":11,"bounds":{"left":0.5008311,"top":0.9537111,"width":0.020113032,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.5242686,"top":0.95530725,"width":0.008976064,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.5359042,"top":0.9537111,"width":0.012799202,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.5497008,"top":0.9545092,"width":0.006150266,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":0.952514,"width":0.022606382,"height":0.014764565},"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"=","depth":11,"bounds":{"left":0.5008311,"top":0.9728651,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:16","depth":11,"bounds":{"left":0.5008311,"top":1.0,"width":0.020279255,"height":-0.010375142},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.52443486,"top":1.0,"width":0.008976064,"height":-0.011971235},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.53607047,"top":1.0,"width":0.012965426,"height":-0.010375142},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.5500333,"top":1.0,"width":0.006150266,"height":-0.011173129},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":1.0,"width":0.022606382,"height":-0.009177923},"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":":","depth":11,"bounds":{"left":0.5008311,"top":1.0,"width":0.0013297872,"height":-0.029529095},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:16","depth":11,"bounds":{"left":0.5008311,"top":1.0,"width":0.020279255,"height":-0.06703913},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"bounds":{"left":0.52443486,"top":1.0,"width":0.008976064,"height":-0.068635225},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"bounds":{"left":0.53607047,"top":1.0,"width":0.012965426,"height":-0.06703913},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"bounds":{"left":0.5500333,"top":1.0,"width":0.006150266,"height":-0.06783724},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"bounds":{"left":0.8784907,"top":1.0,"width":0.022606382,"height":-0.06584203},"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:15","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:15","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:14","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:14","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:10","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:09","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:08","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:07","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 14:13","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Claude","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"secondly","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 10:58","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"clipboard","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"...search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"secondly","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019dffc4-4 (truncated...)","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 10:41","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"clipboard","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"...search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"secondly","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019dffc4-4 (truncated...)","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 10:41","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 10:41","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":")","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 10:41","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":",","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 10:41","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 10:38","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":false,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"▶ video","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22 Apr 12:58","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screen","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ Jiminny — Work","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com/ai-reports/pdf/582d4b50-8cd3-42a9-9819-d676ff8f3b43","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-2276201995919197244
|
6122196094179850537
|
click
|
accessibility
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
SECONDLY
Search
AND also
second required term — both must appear in same result (optional)
Source
App
Date
dd
/
mm
/
yyyy
Calendar
(blank = all dates)
From
--
:
--
To
--
:
--
Only apps
any app (blank = all)
▾
Skip apps
none skipped
▾
FTS tip: single words work best · "exact phrase" · term1 OR term2 · use AND also for required second term · times are in your local timezone · click any result to expand
49 results
▶ video
7 May 19:25
Screen
PhpStorm
/ faVsco.js – Client.php
⏱ Timeline
...true) ??
:SpolicyName = $body
'policyName'
?? Sbody
'policy'
?? null:Map pollcy names to retry delaysif (SpolicvName === 'TEN
SECONDLY
_ROLLING' |I SpolicvName === 'ten
secondly
rolling') {
… (click to expand)
▶ video
7 May 19:10
Screen
PhpStorm
/ faVsco.js – Client.php
⏱ Timeline
...true) ??
:Snolievlane = Sbod/LUpoltiev/lane:1 22 Shody
LnolieyL1L.22 п11rao nolicy names to retry delav1f SpoLicvName ==='TEN
SECONDLY
ROLLING' |I SpolicvName === 'ten
secondly
rolling') {Le
… (click to expand)
7 May 17:24
Typed
Firefox
text
⏱ Timeline
.
7 May 17:23
Typed
Firefox
text
⏱ Timeline
7 May 17:22
Typed
Firefox
text
⏱ Timeline
.
7 May 17:22
Typed
Firefox
text
⏱ Timeline
'
7 May 17:21
Typed
Firefox
text
⏱ Timeline
7 May 17:20
Typed
Firefox
text
⏱ Timeline
7 May 17:19
Typed
Firefox
text
⏱ Timeline
7 May 17:17
Typed
Firefox
text
⏱ Timeline
7 May 17:17
Typed
Firefox
text
⏱ Timeline
$
7 May 17:17
Typed
Firefox
text
⏱ Timeline
;
7 May 17:17
Typed
Firefox
text
⏱ Timeline
=
7 May 17:16
Typed
Firefox
text
⏱ Timeline
:
7 May 17:16
Typed
Firefox
text
⏱ Timeline
7 May 17:15
Typed
Firefox
text
⏱ Timeline
.
7 May 17:15
Typed
Firefox
text
⏱ Timeline
7 May 17:14
Typed
Firefox
text
⏱ Timeline
7 May 17:14
Typed
Firefox
text
⏱ Timeline
.
7 May 17:10
Typed
Firefox
text
⏱ Timeline
7 May 17:09
Typed
Firefox
text
⏱ Timeline
7 May 17:08
Typed
Firefox
text
⏱ Timeline
7 May 17:07
Typed
Firefox
text
⏱ Timeline
7 May 14:13
Typed
Claude
text
⏱ Timeline
secondly
7 May 10:58
Typed
clipboard
⏱ Timeline
...search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your
secondly
limit.","errorType":"RATE_LIMIT","correlationId":"019dffc4-4 (truncated...)
7 May 10:41
Typed
clipboard
⏱ Timeline
...search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your
secondly
limit.","errorType":"RATE_LIMIT","correlationId":"019dffc4-4 (truncated...)
7 May 10:41
Typed
Firefox
text
⏱ Timeline
7 May 10:41
Typed
Firefox
text
⏱ Timeline
)
7 May 10:41
Typed
Firefox
text
⏱ Timeline
,
7 May 10:41
Typed
Firefox
text
⏱ Timeline
(
7 May 10:38
Typed
Firefox
text
⏱ Timeline
▶ video
22 Apr 12:58
Screen
Firefox
/ Jiminny — Work
app.staging.jiminny.com/ai-reports/pdf/582d4b50-8cd3-42a9-9819-d676ff8f3b43...
|
17461
|
NULL
|
NULL
|
NULL
|
|
17479
|
772
|
34
|
2026-05-11T10:24:21.078364+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778495061078_m1.jpg...
|
Firefox
|
Screenpipe — Archive — Personal
|
True
|
app.screenpipe.lakylak.xyz
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
SECONDLY
Search
AND also
second required term — both must appear in same result (optional)
Source
App
Date
dd
/
mm
/
yyyy
Calendar
(blank = all dates)
From
--
:
--
To
--
:
--
Only apps
any app (blank = all)
▾
Skip apps
none skipped
▾
FTS tip: single words work best · "exact phrase" · term1 OR term2 · use AND also for required second term · times are in your local timezone · click any result to expand
49 results
▶ video
7 May 19:25
Screen
PhpStorm
/ faVsco.js – Client.php
⏱ Timeline
...true) ??
:SpolicyName = $body
'policyName'
?? Sbody
'policy'
?? null:Map pollcy names to retry delaysif (SpolicvName === 'TEN
SECONDLY
_ROLLING' |I SpolicvName === 'ten
secondly
rolling') {
… (click to expand)
▶ video
7 May 19:10
Screen
PhpStorm
/ faVsco.js – Client.php
⏱ Timeline
...true) ??
:Snolievlane = Sbod/LUpoltiev/lane:1 22 Shody
LnolieyL1L.22 п11rao nolicy names to retry delav1f SpoLicvName ==='TEN
SECONDLY
ROLLING' |I SpolicvName === 'ten
secondly
rolling') {Le
… (click to expand)
7 May 17:24
Typed
Firefox
text
⏱ Timeline
.
7 May 17:23
Typed
Firefox
text
⏱ Timeline
7 May 17:22
Typed
Firefox
text
⏱ Timeline
.
7 May 17:22
Typed
Firefox
text
⏱ Timeline
'
7 May 17:21
Typed
Firefox
text
⏱ Timeline
7 May 17:20
Typed
Firefox
text
⏱ Timeline
7 May 17:19
Typed
Firefox
text
⏱ Timeline
7 May 17:17
Typed
Firefox
text
⏱ Timeline
7 May 17:17
Typed
Firefox
text
⏱ Timeline
$
7 May 17:17
Typed
Firefox
text
⏱ Timeline...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.043402776,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.06631944,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.08958333,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.112847224,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.13611111,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe [archive.db · 12323.6MB]","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[archive.db · 12323.6MB]","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"on_screen":true,"help_text":"No audio data in this database","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Work Report","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Timetable","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"SECONDLY","depth":8,"on_screen":true,"value":"SECONDLY","help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AND also","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"second required term — both must appear in same result (optional)","depth":8,"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Source","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"App","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dd","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mm","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"yyyy","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"(blank = all dates)","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"From","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Only apps","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"any app (blank = all)","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▾","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Skip apps","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"none skipped","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▾","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FTS tip: single words work best · \"exact phrase\" · term1 OR term2 · use AND also for required second term · times are in your local timezone · click any result to expand","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"49 results","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▶ video","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 19:25","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screen","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PhpStorm","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ faVsco.js – Client.php","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"...true) ??","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":SpolicyName = $body","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'policyName'","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?? Sbody","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'policy'","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?? null:Map pollcy names to retry delaysif (SpolicvName === 'TEN","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SECONDLY","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"_ROLLING' |I SpolicvName === 'ten","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"secondly","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"rolling') {","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"… (click to expand)","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▶ video","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 19:10","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screen","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PhpStorm","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ faVsco.js – Client.php","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"...true) ??","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":Snolievlane = Sbod/LUpoltiev/lane:1 22 Shody","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LnolieyL1L.22 п11rao nolicy names to retry delav1f SpoLicvName ==='TEN","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SECONDLY","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ROLLING' |I SpolicvName === 'ten","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"secondly","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"rolling') {Le","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"… (click to expand)","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:24","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:23","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:22","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:22","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"'","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:21","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:20","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:19","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:17","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7 May 17:17","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"$","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 17:17","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typed","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"text","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏱ Timeline","depth":10,"on_screen":true,"help_text":"Open in Timetable","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-4018796535880356222
|
8428041027538894121
|
click
|
accessibility
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
SECONDLY
Search
AND also
second required term — both must appear in same result (optional)
Source
App
Date
dd
/
mm
/
yyyy
Calendar
(blank = all dates)
From
--
:
--
To
--
:
--
Only apps
any app (blank = all)
▾
Skip apps
none skipped
▾
FTS tip: single words work best · "exact phrase" · term1 OR term2 · use AND also for required second term · times are in your local timezone · click any result to expand
49 results
▶ video
7 May 19:25
Screen
PhpStorm
/ faVsco.js – Client.php
⏱ Timeline
...true) ??
:SpolicyName = $body
'policyName'
?? Sbody
'policy'
?? null:Map pollcy names to retry delaysif (SpolicvName === 'TEN
SECONDLY
_ROLLING' |I SpolicvName === 'ten
secondly
rolling') {
… (click to expand)
▶ video
7 May 19:10
Screen
PhpStorm
/ faVsco.js – Client.php
⏱ Timeline
...true) ??
:Snolievlane = Sbod/LUpoltiev/lane:1 22 Shody
LnolieyL1L.22 п11rao nolicy names to retry delav1f SpoLicvName ==='TEN
SECONDLY
ROLLING' |I SpolicvName === 'ten
secondly
rolling') {Le
… (click to expand)
7 May 17:24
Typed
Firefox
text
⏱ Timeline
.
7 May 17:23
Typed
Firefox
text
⏱ Timeline
7 May 17:22
Typed
Firefox
text
⏱ Timeline
.
7 May 17:22
Typed
Firefox
text
⏱ Timeline
'
7 May 17:21
Typed
Firefox
text
⏱ Timeline
7 May 17:20
Typed
Firefox
text
⏱ Timeline
7 May 17:19
Typed
Firefox
text
⏱ Timeline
7 May 17:17
Typed
Firefox
text
⏱ Timeline
7 May 17:17
Typed
Firefox
text
⏱ Timeline
$
7 May 17:17
Typed
Firefox
text
⏱ Timeline...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
17698
|
777
|
34
|
2026-05-11T10:29:21.092853+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778495361092_m2.jpg...
|
Firefox
|
Screenpipe — Archive — Personal
|
True
|
app.screenpipe.lakylak.xyz
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30
17:00
17:30
18:00
18:30
19:00
19:30
20:00
20:30
21:00
21:30
7 May 15:31 · PhpStorm / faVsco.js – JiminnyDebugCommand.php
⏮ 30s
◀ 10s
⏸ Pause
10s ▶
30s ⏭
15:31
iTerm2
Firefox
CleanShot X
Finder
QuickTime Player
PhpStorm
Music
Control Centre
Claude
Slack
Alfred
Raycast
System Information...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.2942154,"top":0.0518755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.3075133,"top":0.06304868,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.2942154,"top":0.08459697,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.3075133,"top":0.09577015,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3956117,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.29704124,"top":0.118914604,"width":0.108211435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.29704124,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.30801198,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.31914893,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.3302859,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.3414229,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe [archive.db · 12323.6MB]","depth":7,"bounds":{"left":0.41456118,"top":0.061452515,"width":0.06698803,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"bounds":{"left":0.41456118,"top":0.06304868,"width":0.027759308,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[archive.db · 12323.6MB]","depth":9,"bounds":{"left":0.44365028,"top":0.06703911,"width":0.037898935,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"bounds":{"left":0.48620346,"top":0.059856344,"width":0.024767287,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"bounds":{"left":0.51163566,"top":0.059856344,"width":0.023769947,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"bounds":{"left":0.53607047,"top":0.059856344,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"No audio data in this database","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Work Report","depth":7,"bounds":{"left":0.55767953,"top":0.059856344,"width":0.03507314,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Timetable","depth":7,"bounds":{"left":0.5934175,"top":0.059856344,"width":0.029753989,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"bounds":{"left":0.62383646,"top":0.059856344,"width":0.034075797,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"bounds":{"left":0.93849736,"top":0.0650439,"width":0.008144947,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07","depth":9,"bounds":{"left":0.9552859,"top":0.06464485,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"bounds":{"left":0.96110374,"top":0.06464485,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":9,"bounds":{"left":0.9644282,"top":0.06464485,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"bounds":{"left":0.970246,"top":0.06464485,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"bounds":{"left":0.9737367,"top":0.06464485,"width":0.009474734,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"bounds":{"left":0.98454124,"top":0.0650439,"width":0.0051529254,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Monitor","depth":9,"bounds":{"left":0.4945146,"top":0.10853951,"width":0.013464096,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jump to","depth":9,"bounds":{"left":0.8530585,"top":0.10853951,"width":0.01412899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"bounds":{"left":0.87317157,"top":0.10814046,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"bounds":{"left":0.87898934,"top":0.10814046,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"bounds":{"left":0.88231385,"top":0.10814046,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Go","depth":8,"bounds":{"left":0.90109706,"top":0.10454908,"width":0.012300532,"height":0.018754989},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN","depth":10,"bounds":{"left":0.49950132,"top":0.14964086,"width":0.10571808,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"−","depth":9,"bounds":{"left":0.8558843,"top":0.1452514,"width":0.009807181,"height":0.018754989},"on_screen":true,"help_text":"Zoom out","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1×","depth":10,"bounds":{"left":0.86984706,"top":0.14924182,"width":0.004155585,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"+","depth":9,"bounds":{"left":0.87832445,"top":0.1452514,"width":0.009640957,"height":0.018754989},"on_screen":true,"help_text":"Zoom in","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Follow","depth":10,"bounds":{"left":0.8912899,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":10,"bounds":{"left":0.89727396,"top":0.14924182,"width":0.011136968,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:00","depth":13,"bounds":{"left":0.50482047,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:30","depth":13,"bounds":{"left":0.5219415,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:00","depth":13,"bounds":{"left":0.539395,"top":0.21947326,"width":0.0076462766,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:30","depth":13,"bounds":{"left":0.55651593,"top":0.21947326,"width":0.0076462766,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:00","depth":13,"bounds":{"left":0.5734708,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:30","depth":13,"bounds":{"left":0.5905917,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:00","depth":13,"bounds":{"left":0.607879,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:30","depth":13,"bounds":{"left":0.625,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:00","depth":13,"bounds":{"left":0.642121,"top":0.21947326,"width":0.00831117,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:30","depth":13,"bounds":{"left":0.65924203,"top":0.21947326,"width":0.00831117,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15:00","depth":13,"bounds":{"left":0.6765292,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15:30","depth":13,"bounds":{"left":0.69365025,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16:00","depth":13,"bounds":{"left":0.71077126,"top":0.21947326,"width":0.00831117,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16:30","depth":13,"bounds":{"left":0.7280585,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:00","depth":13,"bounds":{"left":0.7453458,"top":0.21947326,"width":0.007978723,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:30","depth":13,"bounds":{"left":0.7624667,"top":0.21947326,"width":0.007978723,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18:00","depth":13,"bounds":{"left":0.77958775,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18:30","depth":13,"bounds":{"left":0.79670876,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:00","depth":13,"bounds":{"left":0.8138298,"top":0.21947326,"width":0.00831117,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:30","depth":13,"bounds":{"left":0.83111703,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:00","depth":13,"bounds":{"left":0.8479056,"top":0.21947326,"width":0.008643617,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:30","depth":13,"bounds":{"left":0.86519283,"top":0.21947326,"width":0.008643617,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:00","depth":13,"bounds":{"left":0.88248,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:30","depth":13,"bounds":{"left":0.8997673,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 15:31 · PhpStorm / faVsco.js – JiminnyDebugCommand.php","depth":10,"bounds":{"left":0.49817154,"top":0.2661612,"width":0.12333777,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏮ 30s","depth":9,"bounds":{"left":0.49883643,"top":0.7186752,"width":0.023936171,"height":0.02434158},"on_screen":true,"help_text":"Ctrl+←","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"◀ 10s","depth":9,"bounds":{"left":0.52543217,"top":0.71907425,"width":0.02244016,"height":0.023942538},"on_screen":true,"help_text":"←","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"⏸ Pause","depth":9,"bounds":{"left":0.5505319,"top":0.7186752,"width":0.027925532,"height":0.02434158},"on_screen":true,"help_text":"Space","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"10s ▶","depth":9,"bounds":{"left":0.58111703,"top":0.71907425,"width":0.022273935,"height":0.023942538},"on_screen":true,"help_text":"→","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"30s ⏭","depth":9,"bounds":{"left":0.60605055,"top":0.7186752,"width":0.024102394,"height":0.02434158},"on_screen":true,"help_text":"Ctrl+→","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"15:31","depth":10,"bounds":{"left":0.8999335,"top":0.7254589,"width":0.009142287,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"iTerm2","depth":9,"bounds":{"left":0.49950132,"top":0.7609737,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":9,"bounds":{"left":0.51961434,"top":0.7609737,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CleanShot X","depth":9,"bounds":{"left":0.5397274,"top":0.7609737,"width":0.021609042,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Finder","depth":9,"bounds":{"left":0.5696476,"top":0.7609737,"width":0.010970744,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QuickTime Player","depth":9,"bounds":{"left":0.58892953,"top":0.7609737,"width":0.030086435,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PhpStorm","depth":9,"bounds":{"left":0.62732714,"top":0.7609737,"width":0.017287234,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Music","depth":9,"bounds":{"left":0.65292555,"top":0.7609737,"width":0.010305851,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Control Centre","depth":9,"bounds":{"left":0.6715425,"top":0.7609737,"width":0.025598405,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Claude","depth":9,"bounds":{"left":0.70545214,"top":0.7609737,"width":0.012134309,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Slack","depth":9,"bounds":{"left":0.7258976,"top":0.7609737,"width":0.009474734,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alfred","depth":9,"bounds":{"left":0.7436835,"top":0.7609737,"width":0.010472074,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Raycast","depth":9,"bounds":{"left":0.7624667,"top":0.7609737,"width":0.013630319,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"System Information","depth":9,"bounds":{"left":0.7844083,"top":0.7609737,"width":0.033909574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-3291474283719703830
|
-6750695550112921703
|
click
|
accessibility
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30
17:00
17:30
18:00
18:30
19:00
19:30
20:00
20:30
21:00
21:30
7 May 15:31 · PhpStorm / faVsco.js – JiminnyDebugCommand.php
⏮ 30s
◀ 10s
⏸ Pause
10s ▶
30s ⏭
15:31
iTerm2
Firefox
CleanShot X
Finder
QuickTime Player
PhpStorm
Music
Control Centre
Claude
Slack
Alfred
Raycast
System Information...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
17743
|
776
|
34
|
2026-05-11T10:31:36.045653+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778495496045_m1.jpg...
|
Slack
|
Aneliya Angelova (DM) - Jiminny Inc - 3 new items Aneliya Angelova (DM) - Jiminny Inc - 3 new items - Slack...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.51180553,"top":0.08111111,"width":0.025,"height":0.04},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7221609583870463791
|
-8138701388860278221
|
visual_change
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
SlackFileEditViewGoHistoryWindowHelpDOCKERO ₴1DEV (docker)Last login: Sun May 10 21:10:26 on ttys013₴2APP (-zsh)883Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ l•-zshHomeDMsActivityFilesLater..•More§ Support Daily - in 1h 29 m100% C8•Mon 11 May 13:31:35ED→Describe what you are looking forJiminny ...clusticclllus+ More unreads## jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of_jimi...0 Direct messages®. Aneliya AngelovaP. Galya Dimitrova D% Petko Kashinskiã. Stefka Stoyanova€. Vasil Vasilev •!. Nikolay IvanovAneliya Angelova, ...2 Stoyan TanevC. Ves8. Lukas Kovalik y...::: AppsToastJira CloudGoogle Cale...Aneliya Angelova6 0MessagesAdd canvasO Files+тлс да се мордаnс anо vма approveTuesday, April 28th~Lukas Kova..те са някави flanky че при мен минават, ще гиоправяза деплой обаче не знамAneliya Angelova 5:14 PMзащоLukas Kovalik 5:15 PMами дали ще усепя да гледамAneliya Angelova 5:16 PMи за двете ли говоришLukas Kovalik 5:16 PMами ще го деплойна но ако нещо грьмнеAneliya Angelova 5:17 PMаа разбрахтеГаля каза че не се използва фичьраи няма проблем да грьмнеToday ~New:Aneliya AngЛукаш за Hubspot за синковете вече се използватази команда нали?crm: sync-hubspot-objectsMessage Aneliya Angelova...
|
17741
|
NULL
|
NULL
|
NULL
|
|
17831
|
779
|
34
|
2026-05-11T10:36:04.842973+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778495764842_m2.jpg...
|
Firefox
|
Screenpipe — Archive — Personal
|
True
|
app.screenpipe.lakylak.xyz
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.2942154,"top":0.0518755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.3075133,"top":0.06304868,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.2942154,"top":0.08459697,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.3075133,"top":0.09577015,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3956117,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.29704124,"top":0.118914604,"width":0.108211435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.29704124,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.30801198,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.31914893,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.3302859,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.3414229,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe [archive.db · 12323.6MB]","depth":7,"bounds":{"left":0.41456118,"top":0.061452515,"width":0.06698803,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"bounds":{"left":0.41456118,"top":0.06304868,"width":0.027759308,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[archive.db · 12323.6MB]","depth":9,"bounds":{"left":0.44365028,"top":0.06703911,"width":0.037898935,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"bounds":{"left":0.48620346,"top":0.059856344,"width":0.024767287,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"bounds":{"left":0.51163566,"top":0.059856344,"width":0.023769947,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"bounds":{"left":0.53607047,"top":0.059856344,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"No audio data in this database","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Work Report","depth":7,"bounds":{"left":0.55767953,"top":0.059856344,"width":0.03507314,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Timetable","depth":7,"bounds":{"left":0.5934175,"top":0.059856344,"width":0.029753989,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"bounds":{"left":0.62383646,"top":0.059856344,"width":0.034075797,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"bounds":{"left":0.93849736,"top":0.0650439,"width":0.008144947,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07","depth":9,"bounds":{"left":0.9552859,"top":0.06464485,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"bounds":{"left":0.96110374,"top":0.06464485,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":9,"bounds":{"left":0.9644282,"top":0.06464485,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"bounds":{"left":0.970246,"top":0.06464485,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"bounds":{"left":0.9737367,"top":0.06464485,"width":0.009474734,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"bounds":{"left":0.98454124,"top":0.0650439,"width":0.0051529254,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Monitor","depth":9,"bounds":{"left":0.4945146,"top":0.10853951,"width":0.013464096,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jump to","depth":9,"bounds":{"left":0.8530585,"top":0.10853951,"width":0.01412899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"bounds":{"left":0.87317157,"top":0.10814046,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"bounds":{"left":0.87898934,"top":0.10814046,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"bounds":{"left":0.88231385,"top":0.10814046,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Go","depth":8,"bounds":{"left":0.90109706,"top":0.10454908,"width":0.012300532,"height":0.018754989},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN","depth":10,"bounds":{"left":0.49950132,"top":0.14964086,"width":0.10571808,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"−","depth":9,"bounds":{"left":0.8558843,"top":0.1452514,"width":0.009807181,"height":0.018754989},"on_screen":true,"help_text":"Zoom out","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1×","depth":10,"bounds":{"left":0.86984706,"top":0.14924182,"width":0.004155585,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"+","depth":9,"bounds":{"left":0.87832445,"top":0.1452514,"width":0.009640957,"height":0.018754989},"on_screen":true,"help_text":"Zoom in","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Follow","depth":10,"bounds":{"left":0.8912899,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":10,"bounds":{"left":0.89727396,"top":0.14924182,"width":0.011136968,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:00","depth":13,"bounds":{"left":0.50482047,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:30","depth":13,"bounds":{"left":0.5219415,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:00","depth":13,"bounds":{"left":0.539395,"top":0.21947326,"width":0.0076462766,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:30","depth":13,"bounds":{"left":0.55651593,"top":0.21947326,"width":0.0076462766,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:00","depth":13,"bounds":{"left":0.5734708,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:30","depth":13,"bounds":{"left":0.5905917,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:00","depth":13,"bounds":{"left":0.607879,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
3784145075470663372
|
2828318890847224729
|
click
|
accessibility
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00...
|
17827
|
NULL
|
NULL
|
NULL
|
|
17910
|
780
|
34
|
2026-05-11T10:41:21.695789+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778496081695_m1.jpg...
|
PhpStorm
|
faVsco.js – ~/jiminny/app/vendor/hubspot/hubspot-p faVsco.js – ~/jiminny/app/vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php...
|
True
|
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
Code changed:
Hide
Sync Changes
Hide This Notification
Reader Mode
<?php
namespace SevenShores\Hubspot\Exceptions;
use Exception;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Psr7\Response;
class HubspotException extends Exception
{
/** @var null|Response */
protected $response;
/**
* @return null|Response
*/
public function getResponse()
{
return $this->response;
}
public static function create(RequestException $guzzleException): self
{
$e = new static(
static::sanitizeResponseMessage($guzzleException->getMessage()),
$guzzleException->getCode(),
$guzzleException
);
$e->response = $guzzleException->getResponse();
return $e;
}
protected static function sanitizeResponseMessage(string $message): string
{
return preg_replace('/(hapikey|access_token)=[a-z0-9-]+/i', '$1=***', $message);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app, folder...
|
[{"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":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reader Mode","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace SevenShores\\Hubspot\\Exceptions;\n\nuse Exception;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Psr7\\Response;\n\nclass HubspotException extends Exception\n{\n /** @var null|Response */\n protected $response;\n\n /**\n * @return null|Response\n */\n public function getResponse()\n {\n return $this->response;\n }\n\n public static function create(RequestException $guzzleException): self\n {\n $e = new static(\n static::sanitizeResponseMessage($guzzleException->getMessage()),\n $guzzleException->getCode(),\n $guzzleException\n );\n\n $e->response = $guzzleException->getResponse();\n\n return $e;\n }\n\n protected static function sanitizeResponseMessage(string $message): string\n {\n return preg_replace('/(hapikey|access_token)=[a-z0-9-]+/i', '$1=***', $message);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace SevenShores\\Hubspot\\Exceptions;\n\nuse Exception;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Psr7\\Response;\n\nclass HubspotException extends Exception\n{\n /** @var null|Response */\n protected $response;\n\n /**\n * @return null|Response\n */\n public function getResponse()\n {\n return $this->response;\n }\n\n public static function create(RequestException $guzzleException): self\n {\n $e = new static(\n static::sanitizeResponseMessage($guzzleException->getMessage()),\n $guzzleException->getCode(),\n $guzzleException\n );\n\n $e->response = $guzzleException->getResponse();\n\n return $e;\n }\n\n protected static function sanitizeResponseMessage(string $message): string\n {\n return preg_replace('/(hapikey|access_token)=[a-z0-9-]+/i', '$1=***', $message);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app ~/jiminny/app, folder","depth":6,"on_screen":false,"role_description":"text"}]...
|
-5482213947665501964
|
-2310047280414997608
|
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
Code changed:
Hide
Sync Changes
Hide This Notification
Reader Mode
<?php
namespace SevenShores\Hubspot\Exceptions;
use Exception;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Psr7\Response;
class HubspotException extends Exception
{
/** @var null|Response */
protected $response;
/**
* @return null|Response
*/
public function getResponse()
{
return $this->response;
}
public static function create(RequestException $guzzleException): self
{
$e = new static(
static::sanitizeResponseMessage($guzzleException->getMessage()),
$guzzleException->getCode(),
$guzzleException
);
$e->response = $guzzleException->getResponse();
return $e;
}
protected static function sanitizeResponseMessage(string $message): string
{
return preg_replace('/(hapikey|access_token)=[a-z0-9-]+/i', '$1=***', $message);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app, folder...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
17915
|
781
|
34
|
2026-05-11T10:41:26.151025+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778496086151_m2.jpg...
|
PhpStorm
|
faVsco.js – ~/jiminny/app/vendor/hubspot/hubspot-p faVsco.js – ~/jiminny/app/vendor/hubspot/hubspot-php/src/Exceptions/BadRequest.php...
|
True
|
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:...
|
[{"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}]...
|
-8912594269423517939
|
-8780801512462775350
|
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:
PhpStormVIeWINavicarecodeLaravelKeractorTOOISWindowmelpFV faVsco.js?9 JY-20725-handle-HS-search-rate-limitProiect vC) ErrorCateT SyncCrmEntitiesTrait.php© ErrorDetai© Filter.phpC FilterGrou(c) Corwardp,• Modelinte© NextPage© Paging.ph© PreviousP© PublicGdp© PublicObie© SimplePut© SimplePub© SimplePub© SimplePut(C) SimolePui© Standard:ApiException© Configuratio(C) HeaderSeled© ObiectSerialiMOwners› M Pioelines>M Products• M Provertiesm Quoted• M SchemasM Ticketc>D Timeline• M EventoM Silec• D Marketing,m WohhonkeMtocte@.aitianoreE.php_csM CHANGELOG.mO# composer.isoncomposer.lock-LCENSE.ohosoec.vmM.README.mdMhubspot-phov Msrc> D Endpointsv M Excentions4 RadRequect nhr4 Hubsnot=ycentiC InvalidAraument>M HtnTacts naccod. 12 120 minutes addlC) TrackAutomatedReportGeneratedevent.onp~© UserAutomatedReportsController.php© PlaybackController.phpC) CachedCrmServiceDecorator.ongJiminnyDeougcommana.ongT DeleteCrmEntityTrait.php© VerifyActivityCrmTaskJob.php© CheckAndRetryRemoteMatch.php© Job.php© BadRequest.php xC) Kernel.phg© PaginationState.php?phonamespace Sevenshores Hubspot Exceptions:class Badreouest extends Huspot Exceotion(c) HubSpot/Service.onpc) RateLimitExceptionlest.ongRateLimitException.phpCProviderkateLimiter.phg© PaginationConfig.phpReader Mode" suppont Dally • In 1h 15m100% L2• Mon 11 May 13:41:25HandleHubspotRateLimitTest v« console (PROD]* console (EUl& console (STAGINGI= laravel.log4 SF [jiminny@localhost]& HS_local [jiminny@localhost][2026-05-07 14:21:15] local.INF0: [Hubspot] DEBUG Getting headers {w.19A"Date":["Thu,07 May 2026 14:21:15 GMT"],"Content-Type":["application/json;charset=utf-8"]."ranster-encoding"•L"chunked"!,"conneccion". Keep-alive"n"CF-Ray": ["9f80deb8db60dc3a-SOF"],"CF-Cache-Status":"DYNAMIC")"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncludeSubDomains: preload")accept-encoding"],access-control-allow-credentials": "false")hserver-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",cfn:desc="9-80de8ercodc3a-TAD"'x-content-type-options": ["nosniff"]."x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"]"Set-Cookie".[" cf bm=STUrtd0aXVrik50odaF6hZVYKhzTn0BidvMabeCtm0Y-1778163675-[IP_ADDRESS]-рT. ZaatDKxTae5zr8 2abBfWM00. ufZEXDZuHz2mBUFdzdo2aTHEs0)07-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Renont-To".f","endnoints"•!\"url\":\"https:|V/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn30%2BKVA3mFIJ2m7YRECDGS\"group\":\"cf-nel\",\"max_age\":604800}"],"success_fraction\":0.01,"repоrс_со " "cт-nel\"\"max_age\":604800}"],"Server":["cloudflare"]}} {"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab"."trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}W Windsurf Teams 7:2 UTF-8 # 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18018
|
782
|
34
|
2026-05-11T10:45:36.087823+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778496336087_m1.jpg...
|
Notion Calendar
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
SlackFileEditViewGoHistoryWindowHelpDOCKER181DEV ( SlackFileEditViewGoHistoryWindowHelpDOCKER181DEV (docker)$2APP (-zsh)883viewsjiminny-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-5:j1minny-worker-processing-5_00:jiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00: stoppedworker-emails:worker-emails_00: stoppedworker-nudges:worker-nudges_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00: stoppedworker-crm-sync:worker-crm-sync_00: stoppedartisan-schedule:artisan-schedule_00: stoppedworker-es-update:worker-es-update_00: stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_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:jiminny-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 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:debugDispatching 100 MatchActivityCrmData jobs (portal=2)Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.root@docker_lamp_1:/home/jiminny# ]DEV (d)-zshHomeDMsActivityFilesLater..•Morelthl• Support Daily • in 1h 15 m100% <78• Mon 11 May 13:45:35ED→Describe what you are looking forJiminny ...# contusion-clinic# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...ToastHomeMessages^ Direct messages®. Aneliya Angelova®. Galya Dimitrova& Petko Kashinski&. Stefka StoyanovaVasil Vasilev OlC. Nikolay IvanovAneliya Angelova, ...Stoyan Tanev®. VesE Lukas Kovalik y... 0AboutiminnyFriday, May 8th ~Added by Toast for GitHubToday ~Toast APP10:00 AMReviewapp#12059 Jy 20820 es reindexstream model hydration2 days old • 12 files changed •@Vasil VasilevAdded by Toast for GitHubResolve Conflictsapp#11443 Test hublets latency5 months old • 20 files changed#11327 JY-19501 webhookbased opportunity syncShow moreAdded by Toast for GitHubNeeds Loveapp#12024 JY-20773 fix user pilottracking ofr automated reportgenerated12 days old • 1 file changedE:: AppsMessage ToastJira CloudToast+AaConala CalaNew...
|
NULL
|
2709395144474348417
|
NULL
|
click
|
ocr
|
NULL
|
SlackFileEditViewGoHistoryWindowHelpDOCKER181DEV ( SlackFileEditViewGoHistoryWindowHelpDOCKER181DEV (docker)$2APP (-zsh)883viewsjiminny-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-5:j1minny-worker-processing-5_00:jiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00: stoppedworker-emails:worker-emails_00: stoppedworker-nudges:worker-nudges_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00: stoppedworker-crm-sync:worker-crm-sync_00: stoppedartisan-schedule:artisan-schedule_00: stoppedworker-es-update:worker-es-update_00: stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_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:jiminny-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 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:debugDispatching 100 MatchActivityCrmData jobs (portal=2)Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.root@docker_lamp_1:/home/jiminny# ]DEV (d)-zshHomeDMsActivityFilesLater..•Morelthl• Support Daily • in 1h 15 m100% <78• Mon 11 May 13:45:35ED→Describe what you are looking forJiminny ...# contusion-clinic# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...ToastHomeMessages^ Direct messages®. Aneliya Angelova®. Galya Dimitrova& Petko Kashinski&. Stefka StoyanovaVasil Vasilev OlC. Nikolay IvanovAneliya Angelova, ...Stoyan Tanev®. VesE Lukas Kovalik y... 0AboutiminnyFriday, May 8th ~Added by Toast for GitHubToday ~Toast APP10:00 AMReviewapp#12059 Jy 20820 es reindexstream model hydration2 days old • 12 files changed •@Vasil VasilevAdded by Toast for GitHubResolve Conflictsapp#11443 Test hublets latency5 months old • 20 files changed#11327 JY-19501 webhookbased opportunity syncShow moreAdded by Toast for GitHubNeeds Loveapp#12024 JY-20773 fix user pilottracking ofr automated reportgenerated12 days old • 1 file changedE:: AppsMessage ToastJira CloudToast+AaConala CalaNew...
|
18017
|
NULL
|
NULL
|
NULL
|
|
18019
|
783
|
34
|
2026-05-11T10:45:36.067492+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778496336067_m2.jpg...
|
Notion Calendar
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
0, Chat°= Cowork+ New chatã Projectso0 Arutactse C 0, Chat°= Cowork+ New chatã Projectso0 Arutactse CustomizeBulgarian citizenship application proces:Dawarich location tracking projectKecentsHubspot Badkequest headers debuggin.Screenpipe sunc script tailing after receMonthly expense trackingExporting transaction data from Notion® How much have I spent for groc...April 2026 spending by categoryCode dift reviewHubSpot rate limit imolementation strateScreenpipe retention policy code locatiolViewing retention policy in screenpipeclean snot x video recoraing terminaticHubSpot rate limit handling with executeUntitleda Screen oine. Is there ability.SMB mount access inconsistency betweWhat is the best switch I can..Fermission deniea on screenpipe volumLast swimming outing with DanDefinition of incarceratedVIewWindowHubSpot rate limit implementation strategyv‹› Code2. On 429, read policyName from the body — the only reliable signal of which bucket fired.3. Apply policy-specific backoff with jitter - Retry-After is nice-to-have but rare invacuee.4. Un success, capture X-Hubspot-RateLimit-x neaders via Guzzle miadleware to clampthe local counter - these are present on 200 responses (just confirmed in your earlierrosuman screenshor showino max=110).I ne asymmetry is the key insignt Hudspot tells you a lot when things are nine, almost nothingwhen they're not. Your limiter has to be smart enough to work with that./service.pnpest.ong© PaginationConfig.php43 470 м3 лok now i don t see neaders on success either (2020-05-07 14-2115] local.INFO[Hubspot) DEBUG Getting headers ?"headers":"Date":l"Thu, 07 May 202614:21:15 GMT"],"Content-Type"["application/json;charset=utf-8"],"Transfer-Encoding":["chunked"],"Connection": ["keep-alive"],"CF-Ray":["9f80deb8db60dc3a-SOF"],"CF-Cache-Status":["DYNAMIC"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains;preload"."Varv"."origin. accept-encoding"."access-control-allow-credentials":["false"],"server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-7May O 0Diaanosed missing headers hv analvzing endnoint tnes and SDK hehavior >Look at what's missing: no X-HubSpot-RateLimit-* headers at all. Not Max, not Remaining,not Interval. But x-hubspot-correlation-id is present, so HubSpot is sending you theircustom neaders — nev ust arent seneine tne rare-mir onesThat's a fingerprint of one specific behavior:Responses from the search API endpoints will not include any of the rate limithandere listed aboveThis is from HubSpot's own docs. Search endpoints strid rate-limit headers regardless ofstatus code — whether the call succeeded or returned a 429. Both cases. headers gone.Your Postman test that showed Max=110, Remaining=109 was against /account-info/v3/details - a non-search endpoint. The current log is almost certainly from a searchcall (probably /crm/v3/objects/contact/search via the SevenShores flow you weredebugging).Verifv itWrite a message..|-17$0"suppont Dally • In 1h 10m100% L2&• Mon 11 May 13:45:35= custom.log x E laravel.log4 SF [jiminny@localhost]A HS_Jocal (jiminny@localhost][2026-05-07 14:21:15] Local. INFO: [Hubspot] DEBUG Getting headers €"neaders".?"Date" : ["Thu,07 May 2026 14:21:15 GMT"],"Content-Type":["application/json;charset=utf-8"]."Transfer-Encoding": ["'chunked"],"conneccion". Keep-alive"n"CF-Ray" : ["9f80deb8db60dc3a-SOF"],"CF-Cache-Status":"DYNAMIC"]"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncLudesubDomains: preload")A console [PROD]A console (EU]4 console (STAGING]w.19Aaccept-encoding"],"access-control-allow-credentials": "false")"server-timing": ["heid; desc=|"019e02d0-6fd8-7812-bdba-885b7ecb3ee3!",cfn:desc="9-80de8ercodcSa-TAD"'"x-content-type-options": l'nosnitf"],"x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"]"Set-Cookie": ["__cf_bm=SIUrtdQgXVcik50pdqF6hZVYKhzTnQBidvMabeCtmOY-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ•UfZEXDZyHz2mBUFdzdo2gTHEs0.07-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Report-To": ["{\"endpoints)":[\"urZ\":\"https:\\/I\/a.nel.cloudflare.com\\/гeport\\/v4?s=NYALsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZ1zoYdxI%2BIxVpHmsKn30%2BKVA3mFIJ2m7YRECDGS\"group)":\"cf-nel\",\"max_age\":604800}"],\"success_fraction\":0.01,("report_to\":\"cf-nel\",\"max_age\":604800}"],"Server": ["cLoudflare"]}} {"correlation_id": "95236535-ec98-4541-b92a-adfa73b69eab","trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}Opus 4.7 Adaptive v1111ik tukas. ProClaude is Al and can make mistakes. Please double-check responses.W Windsurf Teams 20-17UTF.Rf 4 spaces ©...
|
NULL
|
-7377500794634301656
|
NULL
|
click
|
ocr
|
NULL
|
0, Chat°= Cowork+ New chatã Projectso0 Arutactse C 0, Chat°= Cowork+ New chatã Projectso0 Arutactse CustomizeBulgarian citizenship application proces:Dawarich location tracking projectKecentsHubspot Badkequest headers debuggin.Screenpipe sunc script tailing after receMonthly expense trackingExporting transaction data from Notion® How much have I spent for groc...April 2026 spending by categoryCode dift reviewHubSpot rate limit imolementation strateScreenpipe retention policy code locatiolViewing retention policy in screenpipeclean snot x video recoraing terminaticHubSpot rate limit handling with executeUntitleda Screen oine. Is there ability.SMB mount access inconsistency betweWhat is the best switch I can..Fermission deniea on screenpipe volumLast swimming outing with DanDefinition of incarceratedVIewWindowHubSpot rate limit implementation strategyv‹› Code2. On 429, read policyName from the body — the only reliable signal of which bucket fired.3. Apply policy-specific backoff with jitter - Retry-After is nice-to-have but rare invacuee.4. Un success, capture X-Hubspot-RateLimit-x neaders via Guzzle miadleware to clampthe local counter - these are present on 200 responses (just confirmed in your earlierrosuman screenshor showino max=110).I ne asymmetry is the key insignt Hudspot tells you a lot when things are nine, almost nothingwhen they're not. Your limiter has to be smart enough to work with that./service.pnpest.ong© PaginationConfig.php43 470 м3 лok now i don t see neaders on success either (2020-05-07 14-2115] local.INFO[Hubspot) DEBUG Getting headers ?"headers":"Date":l"Thu, 07 May 202614:21:15 GMT"],"Content-Type"["application/json;charset=utf-8"],"Transfer-Encoding":["chunked"],"Connection": ["keep-alive"],"CF-Ray":["9f80deb8db60dc3a-SOF"],"CF-Cache-Status":["DYNAMIC"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains;preload"."Varv"."origin. accept-encoding"."access-control-allow-credentials":["false"],"server-timing": ["hcid;desc=\"019e02d0-6fd8-7812-bdba-7May O 0Diaanosed missing headers hv analvzing endnoint tnes and SDK hehavior >Look at what's missing: no X-HubSpot-RateLimit-* headers at all. Not Max, not Remaining,not Interval. But x-hubspot-correlation-id is present, so HubSpot is sending you theircustom neaders — nev ust arent seneine tne rare-mir onesThat's a fingerprint of one specific behavior:Responses from the search API endpoints will not include any of the rate limithandere listed aboveThis is from HubSpot's own docs. Search endpoints strid rate-limit headers regardless ofstatus code — whether the call succeeded or returned a 429. Both cases. headers gone.Your Postman test that showed Max=110, Remaining=109 was against /account-info/v3/details - a non-search endpoint. The current log is almost certainly from a searchcall (probably /crm/v3/objects/contact/search via the SevenShores flow you weredebugging).Verifv itWrite a message..|-17$0"suppont Dally • In 1h 10m100% L2&• Mon 11 May 13:45:35= custom.log x E laravel.log4 SF [jiminny@localhost]A HS_Jocal (jiminny@localhost][2026-05-07 14:21:15] Local. INFO: [Hubspot] DEBUG Getting headers €"neaders".?"Date" : ["Thu,07 May 2026 14:21:15 GMT"],"Content-Type":["application/json;charset=utf-8"]."Transfer-Encoding": ["'chunked"],"conneccion". Keep-alive"n"CF-Ray" : ["9f80deb8db60dc3a-SOF"],"CF-Cache-Status":"DYNAMIC"]"Strict-Transport-Secur1ty":"max-aqe=31536000* 1ncLudesubDomains: preload")A console [PROD]A console (EU]4 console (STAGING]w.19Aaccept-encoding"],"access-control-allow-credentials": "false")"server-timing": ["heid; desc=|"019e02d0-6fd8-7812-bdba-885b7ecb3ee3!",cfn:desc="9-80de8ercodcSa-TAD"'"x-content-type-options": l'nosnitf"],"x-hubsoot-correlation-id":"019e02d0-6fd8-7812-bdba-885b7ccb3ee3"]"Set-Cookie": ["__cf_bm=SIUrtdQgXVcik50pdqF6hZVYKhzTnQBidvMabeCtmOY-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ•UfZEXDZyHz2mBUFdzdo2gTHEs0.07-May-26 14:51:15 GMT; domain=.hubapi.com; Http0nly; Secure; SameSite=None"],"Report-To": ["{\"endpoints)":[\"urZ\":\"https:\\/I\/a.nel.cloudflare.com\\/гeport\\/v4?s=NYALsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZ1zoYdxI%2BIxVpHmsKn30%2BKVA3mFIJ2m7YRECDGS\"group)":\"cf-nel\",\"max_age\":604800}"],\"success_fraction\":0.01,("report_to\":\"cf-nel\",\"max_age\":604800}"],"Server": ["cLoudflare"]}} {"correlation_id": "95236535-ec98-4541-b92a-adfa73b69eab","trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}Opus 4.7 Adaptive v1111ik tukas. ProClaude is Al and can make mistakes. Please double-check responses.W Windsurf Teams 20-17UTF.Rf 4 spaces ©...
|
18016
|
NULL
|
NULL
|
NULL
|
|
18256
|
791
|
34
|
2026-05-11T11:07:02.978695+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497622978_m2.jpg...
|
PhpStorm
|
faVsco.js – SF [jiminny@localhost]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavicareCodeLaravelKeractorlooIsWindo PhostormVIewINavicareCodeLaravelKeractorlooIsWindowFV faVsco.js?9 JY-20725-handle-HS-search-rate-limitProiectC) TrackAutomated ReportGeneratedzventonp© UserAutomatedReportsController.php© PlaybackController.phpC) Hubspot/Service.php© HubSpot/Service.php(C) TranscodeParameterRescl© UserService.php(c) Uuid.pnp> D TraitsD UseCases> D User> D Utils› D Validation> OvOphp nelpers.ong© InitialFrontendState.php© Jiminny.phpc) Plan.oho© Serializer.phpC) TeamScimDetails.ohpbootstrap>© build.> contia>D contrib→ database>O docsM front-end>D lang> node_modules library rootM ohostan> M nublic>O resourcesv Mroutesphp api.phpphp api_v2.phppnp console.onopnp customer_api.onppnp embedded.ongphp nealtn.onppnp scim.onophp uprotectedweb.phpphp web.phpphp webhook.php>O scriptsv O storage> M debuabar.… M frameworkv Mloas.aitianore• audio wav= custom.loalT SyncCrmEntitiesTrait.phpC) CachedCrmServiceDecorator.ongTDeleteCrmEntityTrait.php© VerifyActivityCrmTaskJob.php© RateLimitExceptionTest.php© CheckAndRetryRemoteMatch.php© MatchActivityCrmData.php© Job.php© CrmActivityService.php© RateLimitExce©)Paginationstate.phg© MatchCrmData.php© CrmObjectsResolver.php© ProviderRateLimiter.php© PaginationConfia.phdclass JiminnyDebuqcommand extends Commandm A5 4133 M11 л V361363364367368379=hubsnot-iournal-noll.log= laravel log< nhnunit ymus tht is= oauth-nrivate kevTacts naccod. 12 (todav 12:02private function natelamitfor (Si = 0 ; $i < 3; $i++) {if ($i % 25 === 0) {scnis"pinto syneine opporcunity 19rSthis->info( string: "Matching contact {$i}"):scrmservice->syncupporcun1cy574/20504scrmservice->macchbyname "kobot"1 usageprivate function simulateMatchActivityStorm(int SteamId = 2, int Scount = 100)• voidSconfio = steam->oetcrmconflourat.ion0Sactivities = Activitv:quervoerm confiauration id' Sconfio->aetidon->orderBvDescdi->Uimit(Scount)->getO:Sthis->info( string: "Dispatching {Sactivities->count} MatchActivityCrmData jobs (portal={$config->getidO})"):fonpach (Sactivities as Cactivitv) &MatchActivityCrmData::dispatch( ...arguments: Sactivity->getId, $config, true):Sthis->info( string: 'Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.'):no usagesprivate function simulateVerifyTaskStorm(int SteamId = 2, int $count = 100): voidSactavitles = Activity::quervol>where co'team_1d', Steamid)s: 'crm provider id')'1d)->net05Sthis->info( string: "Dispatching (Sactivities->count} VerifyActivityCrmiaskJob jobs");foneach (Sactivities as cactivitv) $hl"Preparation tor kerl…. In o3 m100% Lz• Mon 11 May 14:07:02HandleHubspotRateLimitTest v= custom.log= laravel.log X 4 SF (jiminny@localhost] X4 HS_local [jiminny@localhost]# console [PKol)& console lEUllA console [STAGING]Q- 429CcW.*0 resultsio 4 spaces ©...
|
NULL
|
3448487733785951713
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavicareCodeLaravelKeractorlooIsWindo PhostormVIewINavicareCodeLaravelKeractorlooIsWindowFV faVsco.js?9 JY-20725-handle-HS-search-rate-limitProiectC) TrackAutomated ReportGeneratedzventonp© UserAutomatedReportsController.php© PlaybackController.phpC) Hubspot/Service.php© HubSpot/Service.php(C) TranscodeParameterRescl© UserService.php(c) Uuid.pnp> D TraitsD UseCases> D User> D Utils› D Validation> OvOphp nelpers.ong© InitialFrontendState.php© Jiminny.phpc) Plan.oho© Serializer.phpC) TeamScimDetails.ohpbootstrap>© build.> contia>D contrib→ database>O docsM front-end>D lang> node_modules library rootM ohostan> M nublic>O resourcesv Mroutesphp api.phpphp api_v2.phppnp console.onopnp customer_api.onppnp embedded.ongphp nealtn.onppnp scim.onophp uprotectedweb.phpphp web.phpphp webhook.php>O scriptsv O storage> M debuabar.… M frameworkv Mloas.aitianore• audio wav= custom.loalT SyncCrmEntitiesTrait.phpC) CachedCrmServiceDecorator.ongTDeleteCrmEntityTrait.php© VerifyActivityCrmTaskJob.php© RateLimitExceptionTest.php© CheckAndRetryRemoteMatch.php© MatchActivityCrmData.php© Job.php© CrmActivityService.php© RateLimitExce©)Paginationstate.phg© MatchCrmData.php© CrmObjectsResolver.php© ProviderRateLimiter.php© PaginationConfia.phdclass JiminnyDebuqcommand extends Commandm A5 4133 M11 л V361363364367368379=hubsnot-iournal-noll.log= laravel log< nhnunit ymus tht is= oauth-nrivate kevTacts naccod. 12 (todav 12:02private function natelamitfor (Si = 0 ; $i < 3; $i++) {if ($i % 25 === 0) {scnis"pinto syneine opporcunity 19rSthis->info( string: "Matching contact {$i}"):scrmservice->syncupporcun1cy574/20504scrmservice->macchbyname "kobot"1 usageprivate function simulateMatchActivityStorm(int SteamId = 2, int Scount = 100)• voidSconfio = steam->oetcrmconflourat.ion0Sactivities = Activitv:quervoerm confiauration id' Sconfio->aetidon->orderBvDescdi->Uimit(Scount)->getO:Sthis->info( string: "Dispatching {Sactivities->count} MatchActivityCrmData jobs (portal={$config->getidO})"):fonpach (Sactivities as Cactivitv) &MatchActivityCrmData::dispatch( ...arguments: Sactivity->getId, $config, true):Sthis->info( string: 'Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.'):no usagesprivate function simulateVerifyTaskStorm(int SteamId = 2, int $count = 100): voidSactavitles = Activity::quervol>where co'team_1d', Steamid)s: 'crm provider id')'1d)->net05Sthis->info( string: "Dispatching (Sactivities->count} VerifyActivityCrmiaskJob jobs");foneach (Sactivities as cactivitv) $hl"Preparation tor kerl…. In o3 m100% Lz• Mon 11 May 14:07:02HandleHubspotRateLimitTest v= custom.log= laravel.log X 4 SF (jiminny@localhost] X4 HS_local [jiminny@localhost]# console [PKol)& console lEUllA console [STAGING]Q- 429CcW.*0 resultsio 4 spaces ©...
|
18253
|
NULL
|
NULL
|
NULL
|
|
18258
|
790
|
34
|
2026-05-11T11:07:13.794224+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497633794_m1.jpg...
|
Notion Calendar
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelplahlA Preparation for Refi... in 53 mDEV (docker)-zshDOCKERDEV (docker)₴2APP (-zsh)worker-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:worker_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:stoppedworker-emails:worker-emails_00: stoppedworker-audio:worker-audio_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: startedjiminnv-worker-processing-4:jiminnv-worker-nrocessing-4_00:started.ng-5,startedq-delavedH3Jimstartedworkewon$IworkePS-workelLenworker-conferences:worker-conferences_00worker-crm-sync:workercrm-sync_00:PostmanScariworker-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 to inspect cachestate.root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart allINFOClearing cached bootstrap files.configcachecompiledeventsroutesviews84-zshX5screenpipe"100% C8• Mon 11 May 14:07:131881O ₴6-zsh87+DEVN59.22ms DONE97.76ms DONE2.63ms DONE4.67ms DONE11.57ms DONE18.54ms DONE...
|
NULL
|
-8527954522948875556
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelplahlA Preparation for Refi... in 53 mDEV (docker)-zshDOCKERDEV (docker)₴2APP (-zsh)worker-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:worker_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:stoppedworker-emails:worker-emails_00: stoppedworker-audio:worker-audio_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: startedjiminnv-worker-processing-4:jiminnv-worker-nrocessing-4_00:started.ng-5,startedq-delavedH3Jimstartedworkewon$IworkePS-workelLenworker-conferences:worker-conferences_00worker-crm-sync:workercrm-sync_00:PostmanScariworker-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 to inspect cachestate.root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart allINFOClearing cached bootstrap files.configcachecompiledeventsroutesviews84-zshX5screenpipe"100% C8• Mon 11 May 14:07:131881O ₴6-zsh87+DEVN59.22ms DONE97.76ms DONE2.63ms DONE4.67ms DONE11.57ms DONE18.54ms DONE...
|
NULL
|
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
|
True
|
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
|
|
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
|
True
|
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
|
|
18438
|
794
|
34
|
2026-05-11T11:17:24.746222+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778498244746_m1.jpg...
|
iTerm2
|
DEV (docker)
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
worker-crm-update:worker-crm-update_00: stopped
wo 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:worker-crm-sync_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 optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 5.16ms DONE
cache [PASSWORD_DOTS] 27.20ms DONE
compiled [PASSWORD_DOTS] 2.01ms DONE
events [PASSWORD_DOTS] 1.32ms DONE
routes [PASSWORD_DOTS] 1.13ms DONE
views [PASSWORD_DOTS] 15.28ms 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-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_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-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
worker-crm-sync:worker-crm-sync_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
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] 4.18ms DONE
cache [PASSWORD_DOTS] 11.06ms DONE
compiled [PASSWORD_DOTS] 1.84ms DONE
events [PASSWORD_DOTS] 1.32ms DONE
routes [PASSWORD_DOTS] 1.43ms DONE
views [PASSWORD_DOTS]...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"worker-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\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 4.18ms DONE\n cache ............................................................................................................................... 11.06ms DONE\n compiled ............................................................................................................................. 1.84ms DONE\n events ............................................................................................................................... 1.32ms DONE\n routes ............................................................................................................................... 1.43ms DONE\n views ............................................................................................................................... 21.19ms 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-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-emails:worker-emails_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 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 .............................................................................................................................. 11.95ms DONE\n cache ............................................................................................................................... 24.90ms DONE\n compiled ............................................................................................................................. 1.79ms DONE\n events ............................................................................................................................... 2.06ms DONE\n routes ............................................................................................................................... 0.85ms DONE\n views ................................................................................................................................ 4.12ms 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-audio:worker-audio_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-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","depth":4,"on_screen":true,"value":"worker-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\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 4.18ms DONE\n cache ............................................................................................................................... 11.06ms DONE\n compiled ............................................................................................................................. 1.84ms DONE\n events ............................................................................................................................... 1.32ms DONE\n routes ............................................................................................................................... 1.43ms DONE\n views ............................................................................................................................... 21.19ms 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-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-emails:worker-emails_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 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 .............................................................................................................................. 11.95ms DONE\n cache ............................................................................................................................... 24.90ms DONE\n compiled ............................................................................................................................. 1.79ms DONE\n events ............................................................................................................................... 2.06ms DONE\n routes ............................................................................................................................... 0.85ms DONE\n views ................................................................................................................................ 4.12ms 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-audio:worker-audio_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-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","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"},{"role":"AXStaticText","text":"DEV (docker)","depth":1,"bounds":{"left":0.46875,"top":0.033333335,"width":0.0625,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
4570916849262513716
|
4435031408678709508
|
visual_change
|
accessibility
|
NULL
|
worker-crm-update:worker-crm-update_00: stopped
wo 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:worker-crm-sync_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 optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 5.16ms DONE
cache [PASSWORD_DOTS] 27.20ms DONE
compiled [PASSWORD_DOTS] 2.01ms DONE
events [PASSWORD_DOTS] 1.32ms DONE
routes [PASSWORD_DOTS] 1.13ms DONE
views [PASSWORD_DOTS] 15.28ms 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-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_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-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
worker-crm-sync:worker-crm-sync_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
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] 4.18ms DONE
cache [PASSWORD_DOTS] 11.06ms DONE
compiled [PASSWORD_DOTS] 1.84ms DONE
events [PASSWORD_DOTS] 1.32ms DONE
routes [PASSWORD_DOTS] 1.43ms DONE
views [PASSWORD_DOTS]...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18442
|
795
|
34
|
2026-05-11T11:17:44.770193+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778498264770_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
True
|
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'...
|
[{"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}]...
|
-5870622292910750321
|
-8348263803913827968
|
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'
PhostormVIewINavicareCodeLaravelKeractorWindowFV faVsco.js?9 JY-20725-handle-HS-search-rate-limitProiect•.gitignoree audio.wavT SyncCrmEntitiesTrait.phpC) CachedCrmServiceDecorator.ong© HandleHub= nuospor-lournal-poll.log© RateLimitException.php© PaginationConfia.phdonounit.xmiis ttt.isE oauth-private.keyE oauth-public.kev= storageE supervisord.pidclass Cllent extends Baseclient 1mpLements Hubspotcllentintertace121122123text-relav..sontests125FeatureIntearation• m Servicesv 7UnitActions130m ComnonentM ConficurationConsoleContractsD DomainMntoD EnumsD EventsD Exceptions137© EmailActivityImportExcC HandlerT est.php© RateLimitExceptionTes0 fixturesa GuardsD HelpersahiteIntearationsa InteractionsM.Jobs> ActivitvM AiAutomation>M Audiol• M AutomatedRenortsc) CreateResultsTect.ilC) RequestGenerateA.C) RequestGenerateR,© SendReportExpiring© SendReportJobTes@& SendReportMailJobe CondDanartNatGonMelondarMemmTacts naccod. 12 (todav 12:02nubu1etunction 1shubspotrateuimithrowable sel: 000l11 $e instanceof \GuzzleHttp\Exception\RequestExceptionreturn (int) $e->getCode === 429:recurn talsepubunc function parseRetrvAfterThrowable Sel: 1nt1f method existsSe.qetResponseHeaders'?Sheaders = $e->getResponseHeaders() ?: []:svalue = Sheadersl'Retry-After'J ?? Sheadersl'retry-after"! ?? null;if (is arnav(Svalue)) {Svaluel0l 22 null.if (is_numeric($value)) 1return (int) $value;Smessage = strtolower(Se->getMessage):if (str_contains(Smessage, 'daily')) {recurn o00.if (str_ contains(Smessaqe, 'ten secondly')) {recurn 101if (str_ contains(Smessaqe, 'secondly')) {return 1Sthis->lo0->warnina('[Hubspotl No retry-after header or known message. using default'. [l'exception_class' => get_class($e),public function parseMessage(Throwable $e): string© 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.phpA2 467 ×3 ^ VPreparation for Refi.... in 43 m100% C49. Mon 11 May 14:17:4kHandleHubsnotPatel imit Tect= custom.log=laravel.log X4 SF (jiminny@localhost]4 HS_local [jiminny@localhost]A console [PROD]« console [EU]console [STAGINGIQ- 429CcW *L2026-05-11 11:17:21) Local.NOTICE: Monitoring start12026-05-11 11:17 211 LocolNomes: Monitorind end{"correlation id". "985fde59-3852-4120-a620-af3da7ecce17" "tnace id"."4cc10f53-5d39-418d-8e98-fe53d9hbff5fi*{"correlation id"."985fde59-3852-4120-a620-af3da7ecce17"_ itnace id"-"4cc10f53-5d39-418d-8e98-fe53d9hbf£5f"]}TT MM TTITIAio 4 spaces ©...
|
18440
|
NULL
|
NULL
|
NULL
|
|
18556
|
801
|
34
|
2026-05-11T11:33:48.130902+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778499228130_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
True
|
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
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
// Add jitter to prevent thundering herd problem by randomizing retry times
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
23/38
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
454
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:17:21] local.NOTICE: Monitoring start {"correlation_id":"885fde59-3852-4120-a620-af3da7ecce17","trace_id":"4cc10f53-5d39-418d-8e98-fe53d9bbff5f"}
[2026-05-11 11:17:21] local.NOTICE: Monitoring end {"correlation_id":"885fde59-3852-4120-a620-af3da7ecce17","trace_id":"4cc10f53-5d39-418d-8e98-fe53d9bbff5f"}
[2026-05-11 11:17:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a773fb28-5a0c-4b8f-a1b5-d57e6b81db90","trace_id":"fb6d8028-db7d-4ef2-b175-740f0a7b8b39"}
[2026-05-11 11:17:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a773fb28-5a0c-4b8f-a1b5-d57e6b81db90","trace_id":"fb6d8028-db7d-4ef2-b175-740f0a7b8b39"}
[2026-05-11 11:17:37] 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":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] 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":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] 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":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":1,"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\":\"019e16c1-c (truncated...)
"} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":1,"delay":4} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] 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":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] 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":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":1,"delay":3} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] 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":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] 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":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":1,"delay":1} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] 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":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] 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":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":1,"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\":\"019e16c1-c (truncated...)
"} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":1,"delay":2} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] 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":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614378,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] 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":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":1,"delay":3} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613840} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613840,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: ProspectCache - Searching DB for opportunity by owner {"account_id":244,"contact_id":4487,"owner_id":261} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: ProspectCache - Opportunity DB search results {"account_id":244,"contact_id":4487,"opportunity_id":299} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613840,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613840,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613840} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613840,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613833} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613833,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {"worker":"","peak_memory":"99.73 MB","elapsed_seconds":1.0,"update_target":"activities","should_iterate_again":false} {"correlation_id":"8c24420c-db53-4450-9cd8-db5d2426bd57","trace_id":"5406d133-f6cd-4f5a-b463-9146e1dfb021"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613833,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613833,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613833} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613833,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613827} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613827,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613827,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613827,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613827} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613827,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613826} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613826,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613826,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613826,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613826} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613826,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613820} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613820,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613820,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613820,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613820} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613820,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613818} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613818,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613818,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613818,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613818} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613818,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] 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":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] 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":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613812} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613812,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] 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":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613812,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613812,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613812} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613812,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] 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":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] 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":"499c94c1-2716-49a2-9cdf-d5eb84f68ac6","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613807} {"correlation_id":"499c94c1-2716-49a2-9cdf-d5eb84f68ac6","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613807,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"499c94c1-2716-49a2-9cdf-d5eb84f68ac6","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] 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":"499c94c1-2716-49a2-9cdf-d5eb84f68ac6","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"499c94c1-2716-49a2-9cdf-d5eb84f68ac6","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"499c94c1-2716...
|
[{"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.40226063,"top":0.19952115,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.4112367,"top":0.19792499,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.41855052,"top":0.19792499,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n // Add jitter to prevent thundering herd problem by randomizing retry times\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\n }\n}","depth":4,"bounds":{"left":0.11968085,"top":0.16121309,"width":0.30585107,"height":0.8387869},"on_screen":true,"lines":[{"char_start":7,"char_count":25,"bounds":{"left":0.11968085,"top":0.0,"width":0.06216755,"height":0.014365523}},{"char_start":33,"char_count":35,"bounds":{"left":0.11968085,"top":0.0,"width":0.08809841,"height":0.014365523}}],"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\Middleware;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Exceptions\\RateLimitException;\n\n/**\n * Job middleware that catches RateLimitException from HubSpot API calls\n * and releases the job back to the queue with the appropriate delay.\n */\nclass HandleHubspotRateLimit\n{\n private const int MAX_RETRY_DELAY = 600;\n private const int MIN_RETRY_DELAY = 1;\n private const int JITTER_SECONDS = 5;\n\n public function handle(object $job, callable $next): void\n {\n try {\n $next($job);\n } catch (RateLimitException $e) {\n $delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));\n // Add jitter to prevent thundering herd problem by randomizing retry times\n $delay += random_int(0, self::JITTER_SECONDS);\n\n $attempts = $job->attempts();\n if ($attempts <= 3 || $attempts % 10 === 0) {\n Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [\n 'job_class' => $job::class,\n 'attempts' => $attempts,\n 'retry_after' => $e->getRetryAfter(),\n 'delay' => $delay,\n ]);\n }\n\n $job->release($delay);\n }\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.42985374,"top":0.105347164,"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.4424867,"top":0.10454908,"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.45345744,"top":0.10454908,"width":0.043882977,"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.5063165,"top":0.10454908,"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.5162899,"top":0.10454908,"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.5249335,"top":0.10454908,"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.53357714,"top":0.10454908,"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":"23/38","depth":4,"bounds":{"left":0.5472075,"top":0.103751,"width":0.025598405,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.5728058,"top":0.10295291,"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.58144945,"top":0.10295291,"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.5900931,"top":0.10295291,"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.5987367,"top":0.10295291,"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.7250665,"top":0.10295291,"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":"454","depth":4,"bounds":{"left":0.7094415,"top":0.13407822,"width":0.012632979,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.7237367,"top":0.13248204,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.73105055,"top":0.13248204,"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:17:21] local.NOTICE: Monitoring start {\"correlation_id\":\"885fde59-3852-4120-a620-af3da7ecce17\",\"trace_id\":\"4cc10f53-5d39-418d-8e98-fe53d9bbff5f\"}\n[2026-05-11 11:17:21] local.NOTICE: Monitoring end {\"correlation_id\":\"885fde59-3852-4120-a620-af3da7ecce17\",\"trace_id\":\"4cc10f53-5d39-418d-8e98-fe53d9bbff5f\"}\n[2026-05-11 11:17:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a773fb28-5a0c-4b8f-a1b5-d57e6b81db90\",\"trace_id\":\"fb6d8028-db7d-4ef2-b175-740f0a7b8b39\"}\n[2026-05-11 11:17:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a773fb28-5a0c-4b8f-a1b5-d57e6b81db90\",\"trace_id\":\"fb6d8028-db7d-4ef2-b175-740f0a7b8b39\"}\n[2026-05-11 11:17:37] 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\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] 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\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] 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\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] 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\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":1,\"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\\\":\\\"019e16c1-c (truncated...)\n\"} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":4} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] 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\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] 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\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":3} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] 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\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] 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\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":1} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] 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\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] 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\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":1,\"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\\\":\\\"019e16c1-c (truncated...)\n\"} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":2} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] 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\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] 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\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":3} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.0,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"859a4ec6-5c81-4283-bb96-c3ebaf5ff599\",\"trace_id\":\"f8a2783e-c54a-4d43-8cf6-61594479b0e7\"}\n[2026-05-11 11:17:42] 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\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"859a4ec6-5c81-4283-bb96-c3ebaf5ff599\",\"trace_id\":\"f8a2783e-c54a-4d43-8cf6-61594479b0e7\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"859a4ec6-5c81-4283-bb96-c3ebaf5ff599\",\"trace_id\":\"f8a2783e-c54a-4d43-8cf6-61594479b0e7\"}\n[2026-05-11 11:17:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"859a4ec6-5c81-4283-bb96-c3ebaf5ff599\",\"trace_id\":\"f8a2783e-c54a-4d43-8cf6-61594479b0e7\"}\n[2026-05-11 11:17:42] 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\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] 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\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] 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\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":1,\"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\\\":\\\"019e16c1-d (truncated...)\n\"} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":5} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] 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\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] 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\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] 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\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] 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\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] 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\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] 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\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] 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\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:47] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":1,\"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\\\":\\\"019e16c1-e (truncated...)\n\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:47] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":4} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] 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\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] 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\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] 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\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] 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\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] 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\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] 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\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] 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\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] 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\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] 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\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] 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\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] 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\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] 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\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] 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\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] 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\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] 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\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:54] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:54] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:54] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:54] 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\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] 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\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] 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\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] 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\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] 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\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] 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\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] 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\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] 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\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] 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\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] 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\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] 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\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] 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\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] 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\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] 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\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] 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\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] 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\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] 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\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] 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\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] 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\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] 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\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] 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\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] 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\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] 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\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] 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\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] 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\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] 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\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] 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\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] 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\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] 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\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] 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\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] 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\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] 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\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] 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\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] 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\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] 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\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":16.99,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:02] 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\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:03] 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\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:03] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:03] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:03] 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\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:03] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:03] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] 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\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] 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\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] 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\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:05] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:05] 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\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:05] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:05] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:05] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] 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\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] 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\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] 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\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] 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\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] 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\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:08] 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\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] 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\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] 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\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] 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\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:10] 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\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] 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\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] 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\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":4.14,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:12] 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\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:12] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:12] 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\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] 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\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] 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\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"feff8215-75fe-40b2-916e-951435e048aa\",\"trace_id\":\"46d069ed-7c2b-4fdc-9679-9ec571a88271\"}\n[2026-05-11 11:18:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] 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\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:16] 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\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:16] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"feff8215-75fe-40b2-916e-951435e048aa\",\"trace_id\":\"46d069ed-7c2b-4fdc-9679-9ec571a88271\"}\n[2026-05-11 11:18:16] 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\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:16] 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\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] 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\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"feff8215-75fe-40b2-916e-951435e048aa\",\"trace_id\":\"46d069ed-7c2b-4fdc-9679-9ec571a88271\"}\n[2026-05-11 11:18:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"feff8215-75fe-40b2-916e-951435e048aa\",\"trace_id\":\"46d069ed-7c2b-4fdc-9679-9ec571a88271\"}\n[2026-05-11 11:18:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:19] 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\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:19] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":3.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:19] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"5a640073-717d-40da-ad67-be02e37c56a2\",\"trace_id\":\"46d069ed-7c2b-4fdc-9679-9ec571a88271\"}\n[2026-05-11 11:18:20] 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\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] 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\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:21] 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\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:21] 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\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.24,\"average_seconds_per_request\":0.24} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:22] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"447782589921@txt.staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:22] local.INFO: [Prospect match] Cache miss {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\",\"crm\":\"hubspot\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:22] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:22] local.INFO: [HubSpot] importAccount {\"crm_provider_id\":\"749766179\",\"config_id\":2} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:22] local.INFO: [HubSpot] CRM Search requested {\"request\":{\"filterGroups\":[{\"filters\":[{\"propertyName\":\"associations.company\",\"operator\":\"EQ\",\"value\":\"749766179\"},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedwon\",\"4040964\",\"59247967\"]},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedlost\",\"4040965\",\"59247968\"]}]}],\"sorts\":[{\"propertyName\":\"modifieddate\",\"direction\":\"DESCENDING\"}],\"properties\":[\"dealname\",\"amount\",\"hubspot_owner_id\",\"pipeline\",\"dealstage\",\"closedate\",\"deal_currency_code\"],\"limit\":200}} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:22] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":10,\"total_elapsed_seconds\":0.32,\"average_seconds_per_request\":0.32} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612562,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612562,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612562,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] 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\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] 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\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] 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\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] 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\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] 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\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612561,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612561,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] 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\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] 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\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] 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\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"447782589921@txt.staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612560,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612560,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612560,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] 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\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.89,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] 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\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] 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\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] 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\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] 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\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] 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\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] 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\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] 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\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612360,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612360} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612360,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612360,\"participants\":[{\"id\":999552,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999553,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999565,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612360,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.29,\"average_seconds_per_request\":0.29} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612360,\"participants_processed\":3,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612360} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612360,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612360,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612340,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612340} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612340,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612340,\"participants\":[{\"id\":999516,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999517,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999518,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999519,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612340,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.34,\"average_seconds_per_request\":0.34} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612340,\"participants_processed\":4,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612340} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612340,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612340,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":0.75,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612339,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612339} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612339,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612339,\"participants\":[{\"id\":999514,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999515,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999540,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612339,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612339,\"participants_processed\":3,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612339} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612339,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612339,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612336,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612336} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612336,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612336,\"participants\":[{\"id\":999508,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999509,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999512,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999513,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612336,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612336,\"participants_processed\":4,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612336} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612336,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612336,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612183,\"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\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612183} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612183,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612183,\"participants\":[{\"id\":999227,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999228,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612183,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612183,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612183} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612183,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612183,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612182,\"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\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612182} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612182,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612182,\"participants\":[{\"id\":999225,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999226,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612182,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612182,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612182} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612182,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612182,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612181,\"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\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612181} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612181,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612181,\"participants\":[{\"id\":999223,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999224,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612181,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612181,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612181} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612181,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612181,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612180,\"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\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612180} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612180,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612180,\"participants\":[{\"id\":999221,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999222,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612180,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612180,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612180} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612180,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612180,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":611455,\"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\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611455} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611455,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":611455,\"participants\":[{\"id\":997961,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997962,\"user_id\":1460,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"support@staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/support%40staging.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\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.23,\"average_seconds_per_request\":0.23} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Prospect match] Cache miss {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\",\"crm\":\"hubspot\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:35] local.INFO: [HubSpot] importAccount {\"crm_provider_id\":\"749766179\",\"config_id\":2} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:35] local.INFO: [HubSpot] CRM Search requested {\"request\":{\"filterGroups\":[{\"filters\":[{\"propertyName\":\"associations.company\",\"operator\":\"EQ\",\"value\":\"749766179\"},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedwon\",\"4040964\",\"59247967\"]},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedlost\",\"4040965\",\"59247968\"]}]}],\"sorts\":[{\"propertyName\":\"modifieddate\",\"direction\":\"DESCENDING\"}],\"properties\":[\"dealname\",\"amount\",\"hubspot_owner_id\",\"pipeline\",\"dealstage\",\"closedate\",\"deal_currency_code\"],\"limit\":200}} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:35] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":10,\"total_elapsed_seconds\":0.27,\"average_seconds_per_request\":0.27} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":611455,\"team_id\":2,\"email\":\"aneliya.angelova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":611455,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611455} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611455,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":611455,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":611451,\"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\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611451} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611451,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":611451,\"participants\":[{\"id\":997955,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997956,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"support@staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/support%40staging.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\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:37] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.25,\"average_seconds_per_request\":0.25} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:37] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:37] local.INFO: [Prospect match] Cache miss {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\",\"crm\":\"hubspot\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:37] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:37] local.INFO: [HubSpot] importAccount {\"crm_provider_id\":\"749766179\",\"config_id\":2} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:37] local.INFO: [HubSpot] CRM Search requested {\"request\":{\"filterGroups\":[{\"filters\":[{\"propertyName\":\"associations.company\",\"operator\":\"EQ\",\"value\":\"749766179\"},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedwon\",\"4040964\",\"59247967\"]},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedlost\",\"4040965\",\"59247968\"]}]}],\"sorts\":[{\"propertyName\":\"modifieddate\",\"direction\":\"DESCENDING\"}],\"properties\":[\"dealname\",\"amount\",\"hubspot_owner_id\",\"pipeline\",\"dealstage\",\"closedate\",\"deal_currency_code\"],\"limit\":200}} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:38] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":10,\"total_elapsed_seconds\":0.44,\"average_seconds_per_request\":0.44} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":611451,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":3.16,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":611451,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611451} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611451,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":611451,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":611087,\"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\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611087} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611087,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":611087,\"participants\":[{\"id\":997368,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997369,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":611087,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":611087,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611087} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611087,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":611087,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":611076,\"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\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611076} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611076,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":611076,\"participants\":[{\"id\":997346,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997347,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":611076,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":611076,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611076} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611076,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":611076,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610935,\"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\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610935} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610935,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610935,\"participants\":[{\"id\":997141,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997142,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610935,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610935,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610935} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610935,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610935,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610915,\"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\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610915} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610915,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610915,\"participants\":[{\"id\":997104,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997105,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610915,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610915,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610915} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610915,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610915,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610900,\"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\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610900} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610900,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610900,\"participants\":[{\"id\":997081,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997082,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610900,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610900,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610900} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610900,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610900,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610885,\"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\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610885} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610885,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610885,\"participants\":[{\"id\":997051,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997052,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610885,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610885,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610885} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610885,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610885,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610878,\"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\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610878} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610878,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610878,\"participants\":[{\"id\":997035,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997036,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610878,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610878,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610878} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610878,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610878,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610874,\"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\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610874} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610874,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610874,\"participants\":[{\"id\":997025,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997026,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610874,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610874,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610874} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610874,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610874,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610867,\"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\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610867} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610867,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610867,\"participants\":[{\"id\":997011,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997012,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610867,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610867,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610867} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610867,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610867,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610764,\"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\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610764} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610764,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610764,\"participants\":[{\"id\":996951,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996952,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610764,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610764,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610764} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610764,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610764,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610617,\"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\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610617} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610617,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610617,\"participants\":[{\"id\":996641,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996642,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610617,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610617,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610617} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610617,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610617,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610539,\"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\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610539} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610539,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610539,\"participants\":[{\"id\":996485,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996486,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610539,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610539,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610539} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610539,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610539,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":0.4,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610528,\"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\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610528} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610528,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610528,\"participants\":[{\"id\":996463,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996464,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610528,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610528,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610528} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610528,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610528,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610506,\"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\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610506} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610506,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610506,\"participants\":[{\"id\":996419,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996420,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610506,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610506,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610506} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610506,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610506,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610497,\"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\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610497} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610497,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610497,\"participants\":[{\"id\":996401,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996402,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610497,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610497,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610497} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610497,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610497,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610490,\"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\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610490} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610490,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610490,\"participants\":[{\"id\":996385,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996386,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610490,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610490,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610490} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610490,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610490,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610470,\"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\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610470} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610470,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610470,\"participants\":[{\"id\":996369,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996370,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610470,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610470,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610470} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610470,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610470,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610462,\"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\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610462} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610462,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610462,\"participants\":[{\"id\":996353,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996354,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610462,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610462,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610462} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610462,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610462,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610451,\"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\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610451} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610451,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610451,\"participants\":[{\"id\":996340,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996341,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610451,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610451,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610451} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610451,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610451,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610438,\"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\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610438} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610438,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610438,\"participants\":[{\"id\":996320,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996321,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610438,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610438,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610438} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610438,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610438,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610426,\"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\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610426} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610426,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610426,\"participants\":[{\"id\":996306,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996307,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610426,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610426,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610426} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610426,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610426,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610403,\"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\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610403} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610403,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610403,\"participants\":[{\"id\":996282,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996283,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610403,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610403,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610403} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610403,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610403,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610400,\"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\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610400} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610400,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610400,\"participants\":[{\"id\":996275,\"user_id\":1460,\"contact_id\":null,\"lead_id\":null},{\"id\":996276,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":996277,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610400,\"team_id\":2,\"email\":\"aneliya.angelova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610400,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":1460} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610400,\"participants_processed\":3,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610400} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610400,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610400,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] 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\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"nikolay.nikolov@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [Prospect match] Cache miss {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\",\"crm\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [HubSpot] importAccount {\"crm_provider_id\":\"749766179\",\"config_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [HubSpot] CRM Search requested {\"request\":{\"filterGroups\":[{\"filters\":[{\"propertyName\":\"associations.company\",\"operator\":\"EQ\",\"value\":\"749766179\"},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedwon\",\"4040964\",\"59247967\"]},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedlost\",\"4040965\",\"59247968\"]}]}],\"sorts\":[{\"propertyName\":\"modifieddate\",\"direction\":\"DESCENDING\"}],\"properties\":[\"dealname\",\"amount\",\"hubspot_owner_id\",\"pipeline\",\"dealstage\",\"closedate\",\"deal_currency_code\"],\"limit\":200}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":10,\"total_elapsed_seconds\":0.35,\"average_seconds_per_request\":0.35} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":614382,\"team_id\":2,\"email\":\"nikolay.nikolov@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":614382,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:50] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":614382,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:50] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"nikolay.nikolov@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":614381,\"team_id\":2,\"email\":\"nikolay.nikolov@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":614381,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":614381,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"nikolay.nikolov@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":615092,\"team_id\":2,\"email\":\"nikolay.nikolov@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":615092,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":615092,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"nikolay.nikolov@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":614436,\"team_id\":2,\"email\":\"nikolay.nikolov@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":614436,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":614436,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:50] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"nikolay.nikolov@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nmalchev@gmail.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":614378,\"team_id\":2,\"email\":\"nikolay.nikolov@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":614378,\"participants_processed\":3,\"exact_matches\":1,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":614378,\"remote_search\":true,\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":0.84,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:51] 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\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.28,\"average_seconds_per_request\":0.28} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:52] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"adelina.petrova@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:52] local.INFO: [Prospect match] Cache miss {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\",\"crm\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:52] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:52] local.INFO: [HubSpot] importAccount {\"crm_provider_id\":\"749766179\",\"config_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:52] local.INFO: [HubSpot] CRM Search requested {\"request\":{\"filterGroups\":[{\"filters\":[{\"propertyName\":\"associations.company\",\"operator\":\"EQ\",\"value\":\"749766179\"},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedwon\",\"4040964\",\"59247967\"]},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedlost\",\"4040965\",\"59247968\"]}]}],\"sorts\":[{\"propertyName\":\"modifieddate\",\"direction\":\"DESCENDING\"}],\"properties\":[\"dealname\",\"amount\",\"hubspot_owner_id\",\"pipeline\",\"dealstage\",\"closedate\",\"deal_currency_code\"],\"limit\":200}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":10,\"total_elapsed_seconds\":0.43,\"average_seconds_per_request\":0.43} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:53] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612847,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:53] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:53] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612847,\"participants_processed\":3,\"exact_matches\":1,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:54] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:54] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:54] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612847,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:54] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"adelina.petrova@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612819,\"participants_processed\":3,\"exact_matches\":1,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612819,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:57] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":0.25,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:19:07] 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\":\"70d16739-7654-4185-99cb-49559aafc660\",\"trace_id\":\"d100f21a-5975-471a-b245-90b25b177c8f\"}\n[2026-05-11 11:19:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"70d16739-7654-4185-99cb-49559aafc660\",\"trace_id\":\"d100f21a-5975-471a-b245-90b25b177c8f\"}\n[2026-05-11 11:19:07] 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\":\"70d16739-7654-4185-99cb-49559aafc660\",\"trace_id\":\"d100f21a-5975-471a-b245-90b25b177c8f\"}\n[2026-05-11 11:19:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"91df8068-6c15-4614-947e-90f48574662c\",\"trace_id\":\"a9a86198-7521-4c0c-a89e-d23b34f2f8bf\"}\n[2026-05-11 11:19:12] 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\":\"91df8068-6c15-4614-947e-90f48574662c\",\"trace_id\":\"a9a86198-7521-4c0c-a89e-d23b34f2f8bf\"}\n[2026-05-11 11:19:15] local.NOTICE: Monitoring start {\"correlation_id\":\"6fae005c-3fcd-4718-86b0-f08f140f889c\",\"trace_id\":\"233ad400-a3ad-4093-8660-9e477cd6ca8f\"}\n[2026-05-11 11:19:15] local.NOTICE: Monitoring end {\"correlation_id\":\"6fae005c-3fcd-4718-86b0-f08f140f889c\",\"trace_id\":\"233ad400-a3ad-4093-8660-9e477cd6ca8f\"}\n[2026-05-11 11:19:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"08b79017-e665-425f-8048-21f93b1abf3b\",\"trace_id\":\"bb7a7ea5-30d3-4a13-9c3c-84bc1f9c26e7\"}\n[2026-05-11 11:19:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"08b79017-e665-425f-8048-21f93b1abf3b\",\"trace_id\":\"bb7a7ea5-30d3-4a13-9c3c-84bc1f9c26e7\"}\n[2026-05-11 11:19:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0c31163b-b05f-4d3f-9a66-a2ce01d94010\",\"trace_id\":\"3dfb6352-28a3-4c77-b6ff-a11e0a7821a0\"}\n[2026-05-11 11:19:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"0c31163b-b05f-4d3f-9a66-a2ce01d94010\",\"trace_id\":\"3dfb6352-28a3-4c77-b6ff-a11e0a7821a0\"}\n[2026-05-11 11:19:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"0c31163b-b05f-4d3f-9a66-a2ce01d94010\",\"trace_id\":\"3dfb6352-28a3-4c77-b6ff-a11e0a7821a0\"}\n[2026-05-11 11:19:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0c31163b-b05f-4d3f-9a66-a2ce01d94010\",\"trace_id\":\"3dfb6352-28a3-4c77-b6ff-a11e0a7821a0\"}\n[2026-05-11 11:20:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb3a4a64-b00b-4f94-9e00-c190cd7a7a42\",\"trace_id\":\"acd43b75-f255-471f-9563-f03de03c7e23\"}\n[2026-05-11 11:20:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"cb3a4a64-b00b-4f94-9e00-c190cd7a7a42\",\"trace_id\":\"acd43b75-f255-471f-9563-f03de03c7e23\"}\n[2026-05-11 11:20:08] 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\":\"cb3a4a64-b00b-4f94-9e00-c190cd7a7a42\",\"trace_id\":\"acd43b75-f255-471f-9563-f03de03c7e23\"}\n[2026-05-11 11:20:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8ab6728e-9079-4166-bf97-fed4fb2ac7de\",\"trace_id\":\"508ecd6c-81db-47d4-8fad-d40b1e55cff3\"}\n[2026-05-11 11:20:10] 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\":\"8ab6728e-9079-4166-bf97-fed4fb2ac7de\",\"trace_id\":\"508ecd6c-81db-47d4-8fad-d40b1e55cff3\"}\n[2026-05-11 11:20:13] local.NOTICE: Monitoring start {\"correlation_id\":\"98b2a767-ff2a-4f82-866f-bf7dad58fe13\",\"trace_id\":\"ecb25ade-8dda-4d47-8bce-6b84e3c8fd0c\"}\n[2026-05-11 11:20:13] local.NOTICE: Monitoring end {\"correlation_id\":\"98b2a767-ff2a-4f82-866f-bf7dad58fe13\",\"trace_id\":\"ecb25ade-8dda-4d47-8bce-6b84e3c8fd0c\"}\n[2026-05-11 11:20:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"05f19e62-48e4-4c36-9577-648a2dd54abd\",\"trace_id\":\"e3d3acd1-5c23-4f37-9566-32a0cbd7a4eb\"}\n[2026-05-11 11:20:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"05f19e62-48e4-4c36-9577-648a2dd54abd\",\"trace_id\":\"e3d3acd1-5c23-4f37-9566-32a0cbd7a4eb\"}\n[2026-05-11 11:20:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d5c19bc5-1a17-4b6d-9f62-a6715a8005c9\",\"trace_id\":\"451385cf-1bcd-4e06-8412-e5d197f5f567\"}\n[2026-05-11 11:20:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d5c19bc5-1a17-4b6d-9f62-a6715a8005c9\",\"trace_id\":\"451385cf-1bcd-4e06-8412-e5d197f5f567\"}\n[2026-05-11 11:20:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d5c19bc5-1a17-4b6d-9f62-a6715a8005c9\",\"trace_id\":\"451385cf-1bcd-4e06-8412-e5d197f5f567\"}\n[2026-05-11 11:20:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d5c19bc5-1a17-4b6d-9f62-a6715a8005c9\",\"trace_id\":\"451385cf-1bcd-4e06-8412-e5d197f5f567\"}\n[2026-05-11 11:20:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a01c4c40-1c1e-4865-be1f-0aa63b4fd1b9\",\"trace_id\":\"cba182ec-cbe6-4d53-b1c6-253546138cc8\"}\n[2026-05-11 11:20:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-11 11:18:00, 2026-05-11 11:20:00] {\"correlation_id\":\"a01c4c40-1c1e-4865-be1f-0aa63b4fd1b9\",\"trace_id\":\"cba182ec-cbe6-4d53-b1c6-253546138cc8\"}\n[2026-05-11 11:20:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-11 11:18:00, 2026-05-11 11:20:00] {\"correlation_id\":\"a01c4c40-1c1e-4865-be1f-0aa63b4fd1b9\",\"trace_id\":\"cba182ec-cbe6-4d53-b1c6-253546138cc8\"}\n[2026-05-11 11:20:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a01c4c40-1c1e-4865-be1f-0aa63b4fd1b9\",\"trace_id\":\"cba182ec-cbe6-4d53-b1c6-253546138cc8\"}\n[2026-05-11 11:20:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b599f338-6a44-44d5-9f81-6fa300c4ea1b\",\"trace_id\":\"c7645418-4758-4410-83f2-8fe71ebf2ec2\"}\n[2026-05-11 11:20:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b599f338-6a44-44d5-9f81-6fa300c4ea1b\",\"trace_id\":\"c7645418-4758-4410-83f2-8fe71ebf2ec2\"}\n[2026-05-11 11:20:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3c9d7674-d005-4372-8a60-2e8ecb587584\",\"trace_id\":\"22a0bdee-d653-4113-963c-043a68a4a8be\"}\n[2026-05-11 11:20:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3c9d7674-d005-4372-8a60-2e8ecb587584\",\"trace_id\":\"22a0bdee-d653-4113-963c-043a68a4a8be\"}\n[2026-05-11 11:20:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1453203b-bac8-47ba-ac62-6369ac533fc2\",\"trace_id\":\"f176800e-9da8-4580-a332-56fa3402dbb7\"}\n[2026-05-11 11:20:31] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"1453203b-bac8-47ba-ac62-6369ac533fc2\",\"trace_id\":\"f176800e-9da8-4580-a332-56fa3402dbb7\"}\n[2026-05-11 11:20:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1453203b-bac8-47ba-ac62-6369ac533fc2\",\"trace_id\":\"f176800e-9da8-4580-a332-56fa3402dbb7\"}\n[2026-05-11 11:20:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2310f110-1f7e-4a28-b0c3-e5f8fc72688f\",\"trace_id\":\"9d6e8217-2f4e-4b23-8f36-8538f57064d9\"}\n[2026-05-11 11:20:33] local.INFO: Running conference:monitor:start command for activities in (2026-05-11 11:10:00, 2026-05-11 11:15:00] {\"correlation_id\":\"2310f110-1f7e-4a28-b0c3-e5f8fc72688f\",\"trace_id\":\"9d6e8217-2f4e-4b23-8f36-8538f57064d9\"}\n[2026-05-11 11:20:33] local.INFO: [conference:monitor:start] No activities found in (2026-05-11 11:10:00, 2026-05-11 11:15:00] {\"correlation_id\":\"2310f110-1f7e-4a28-b0c3-e5f8fc72688f\",\"trace_id\":\"9d6e8217-2f4e-4b23-8f36-8538f57064d9\"}\n[2026-05-11 11:20:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2310f110-1f7e-4a28-b0c3-e5f8fc72688f\",\"trace_id\":\"9d6e8217-2f4e-4b23-8f36-8538f57064d9\"}\n[2026-05-11 11:20:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"48a2dc23-76e1-4b34-b8a7-a7a957c71373\",\"trace_id\":\"b1788ca3-54cf-4031-b198-102838446996\"}\n[2026-05-11 11:20:37] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:15\",\"to\":\"11:20\"} {\"correlation_id\":\"48a2dc23-76e1-4b34-b8a7-a7a957c71373\",\"trace_id\":\"b1788ca3-54cf-4031-b198-102838446996\"}\n[2026-05-11 11:20:38] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:10\",\"to\":\"01:15\"} {\"correlation_id\":\"48a2dc23-76e1-4b34-b8a7-a7a957c71373\",\"trace_id\":\"b1788ca3-54cf-4031-b198-102838446996\"}\n[2026-05-11 11:20:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"48a2dc23-76e1-4b34-b8a7-a7a957c71373\",\"trace_id\":\"b1788ca3-54cf-4031-b198-102838446996\"}\n[2026-05-11 11:20:41] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:43] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:43] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"28cf48be-a629-420c-a0a4-0d20fbd05838\",\"trace_id\":\"4fdaba19-5d8e-45db-a600-da048c8066fb\"}\n[2026-05-11 11:20:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6a6c06af-94cf-46bf-976e-55e401b3a588\",\"trace_id\":\"338c3b84-fc5a-404b-bed6-97341331ae68\"}\n[2026-05-11 11:20:48] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:48] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":60.0} {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:48] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-11T11:22:48.807561Z\"} {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:48] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"28cf48be-a629-420c-a0a4-0d20fbd05838\",\"trace_id\":\"4fdaba19-5d8e-45db-a600-da048c8066fb\"}\n[2026-05-11 11:20:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6a6c06af-94cf-46bf-976e-55e401b3a588\",\"trace_id\":\"338c3b84-fc5a-404b-bed6-97341331ae68\"}\n[2026-05-11 11:20:49] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:49] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:53] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c8d52370-b908-428c-b973-699db0be2136\",\"trace_id\":\"fabc1f54-e263-4ba0-b8ff-324f62e84f1f\"}\n[2026-05-11 11:20:53] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c8d52370-b908-428c-b973-699db0be2136\",\"trace_id\":\"fabc1f54-e263-4ba0-b8ff-324f62e84f1f\"}\n[2026-05-11 11:20:54] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"de84a4c9-d2c5-4950-8c2d-f400cee667bf\",\"trace_id\":\"223fd9b2-ed24-4083-98cd-1bc4040dbbd1\"}\n[2026-05-11 11:20:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"de84a4c9-d2c5-4950-8c2d-f400cee667bf\",\"trace_id\":\"223fd9b2-ed24-4083-98cd-1bc4040dbbd1\"}\n[2026-05-11 11:20:59] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}","depth":4,"on_screen":true,"value":"[2026-05-11 11:17:21] local.NOTICE: Monitoring start {\"correlation_id\":\"885fde59-3852-4120-a620-af3da7ecce17\",\"trace_id\":\"4cc10f53-5d39-418d-8e98-fe53d9bbff5f\"}\n[2026-05-11 11:17:21] local.NOTICE: Monitoring end {\"correlation_id\":\"885fde59-3852-4120-a620-af3da7ecce17\",\"trace_id\":\"4cc10f53-5d39-418d-8e98-fe53d9bbff5f\"}\n[2026-05-11 11:17:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a773fb28-5a0c-4b8f-a1b5-d57e6b81db90\",\"trace_id\":\"fb6d8028-db7d-4ef2-b175-740f0a7b8b39\"}\n[2026-05-11 11:17:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a773fb28-5a0c-4b8f-a1b5-d57e6b81db90\",\"trace_id\":\"fb6d8028-db7d-4ef2-b175-740f0a7b8b39\"}\n[2026-05-11 11:17:37] 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\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] 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\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:37] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] 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\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] 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\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":1,\"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\\\":\\\"019e16c1-c (truncated...)\n\"} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":4} {\"correlation_id\":\"01554272-3758-416d-bcd8-0b07cf17fce3\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] 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\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] 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\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:38] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":3} {\"correlation_id\":\"6f97c580-31f1-4723-80d8-b1046a615d37\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] 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\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] 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\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":1} {\"correlation_id\":\"80fe8576-047a-495f-b42a-d75cb83d9591\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] 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\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] 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\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":1,\"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\\\":\\\"019e16c1-c (truncated...)\n\"} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":2} {\"correlation_id\":\"55cd98de-2b2f-4dd6-b0d5-36af698ea32d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] 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\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] 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\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:39] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":3} {\"correlation_id\":\"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.0,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"d1d42ab0-5c87-42e8-a91f-a56b538619ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"861e79c7-b5d3-4476-b429-0f1b4cf196a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"97a99ff2-5956-4d77-837b-790c01b09967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:40] 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\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"300f80c3-6a45-4372-85a9-9fe439206596\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7a348156-9d36-4f25-ad5e-4fbfce8fd82a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"499c94c1-2716-49a2-9cdf-d5eb84f68ac6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"7ce06f3c-60ee-46e5-a4dd-5b2b95b5bb64\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"9d268b15-7a74-40a7-a15c-f91054c54d96\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"b347b4f8-2099-4fd0-86a2-735eb4d1c5a0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"bbd8f44b-f8df-4187-889c-55f3536e4b2b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:41] 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\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"a49ef1a2-1961-4831-8425-89bedec362f9\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"5a448789-544e-4bf0-906d-aa7745a76fa7\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"816a5557-12ef-4f10-964e-fb5da4d1024b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"03eaee80-dad2-4f52-b0c4-ca587c0bd5a1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"0e646a90-8a23-4b8f-bef7-d4404cdc448e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"859a4ec6-5c81-4283-bb96-c3ebaf5ff599\",\"trace_id\":\"f8a2783e-c54a-4d43-8cf6-61594479b0e7\"}\n[2026-05-11 11:17:42] 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\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"859a4ec6-5c81-4283-bb96-c3ebaf5ff599\",\"trace_id\":\"f8a2783e-c54a-4d43-8cf6-61594479b0e7\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"e5deb2bc-6198-453a-bc77-dfc3b86ed330\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"859a4ec6-5c81-4283-bb96-c3ebaf5ff599\",\"trace_id\":\"f8a2783e-c54a-4d43-8cf6-61594479b0e7\"}\n[2026-05-11 11:17:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"859a4ec6-5c81-4283-bb96-c3ebaf5ff599\",\"trace_id\":\"f8a2783e-c54a-4d43-8cf6-61594479b0e7\"}\n[2026-05-11 11:17:42] 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\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:42] 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\":\"82d063fd-d6ec-4181-b9db-f7a3ef17fdaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"cb00d0fd-ad25-43c5-8390-7596ea614d43\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"2c16c154-a215-4582-9980-ebd7ee64044a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"4b1d2748-24b2-4a6b-8e7a-2fef29e92699\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] 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\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:43] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] 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\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] 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\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":1,\"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\\\":\\\"019e16c1-d (truncated...)\n\"} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":5} {\"correlation_id\":\"370e35c5-d81b-4c82-987e-e6bfe92913c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] 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\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:44] 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\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] 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\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] 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\":\"629c3489-2741-42d3-872d-118c8ddef317\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] 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\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] 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\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:45] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] 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\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:46] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:47] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":1,\"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\\\":\\\"019e16c1-e (truncated...)\n\"} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:47] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":1,\"delay\":4} {\"correlation_id\":\"275577f1-42f7-466e-9ce6-c17b3f2fa4ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] 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\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] 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\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] 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\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] 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\":\"7d0f2fd2-918d-403e-a6ce-e803fbdc5b08\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] 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\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] 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\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] 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\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] 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\":\"97ce283e-ee51-4404-bc23-21d951bddd4b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] 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\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] 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\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] 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\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:51] 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\":\"dd9259e7-418a-47a0-8057-6d73eb23b66f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] 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\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] 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\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] 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\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:53] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:54] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:54] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:54] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:54] 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\":\"e3420252-13cf-48c2-bb64-835fa0b7a4a4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] 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\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] 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\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] 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\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:55] 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\":\"0a7ad0b2-4fbb-4bc6-ac63-ab9a3755668d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] 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\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] 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\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] 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\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:56] 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\":\"ab7b332f-3248-47be-ae07-2194ad2db67f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] 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\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] 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\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] 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\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:57] 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\":\"3e75582e-1c8d-4a79-b2f5-c5b402351b6e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] 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\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] 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\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] 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\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] 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\":\"aa3bcf96-a28f-41da-9705-9ed54e0c2102\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] 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\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:58] 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\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] 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\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] 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\":\"26135f3d-da44-4d76-a60f-10382d2fb967\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] 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\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:17:59] 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\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] 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\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] 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\":\"b8d871e8-9441-4887-b52c-673ba317b86f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] 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\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] 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\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] 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\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:00] 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\":\"a5db6a27-7474-478f-ae10-588189dcf4c5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] 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\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] 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\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] 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\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] 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\":\"cf2e7822-f4b9-4a8d-8a4f-191d404ca5d8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] 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\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:01] 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\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"48ab04f3-8832-412a-b14d-ef2d05d438c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":16.99,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:02] 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\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"ddc565df-f051-4082-9bd2-4eb892b2bed2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:02] 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\":\"0ec5d5d4-7b90-4702-86a4-3dd3318a0456\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:03] 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\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:03] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:03] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:03] 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\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:03] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:03] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] 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\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] 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\":\"06ce1669-8714-4bd5-b110-0d8905e544eb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] 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\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:04] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:05] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:05] 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\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:05] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:05] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:05] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:05] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] 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\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] 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\":\"9e046bb0-fe09-4981-90d8-9e4e1a2d9821\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] 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\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:06] 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\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] 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\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:07] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:08] 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\":\"4bb39316-5956-491d-9643-e85e3a2d2295\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] 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\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] 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\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] 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\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:09] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:10] 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\":\"233ce7c6-8ba8-4646-b04e-55dc11e56023\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] 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\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] 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\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":4.14,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:11] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:12] 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\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:12] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:12] 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\":\"225d184a-6550-4e96-b55f-b2f6affc3f72\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] 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\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] 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\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"feff8215-75fe-40b2-916e-951435e048aa\",\"trace_id\":\"46d069ed-7c2b-4fdc-9679-9ec571a88271\"}\n[2026-05-11 11:18:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] 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\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:16] 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\":\"b86ac27b-8e79-4924-8480-832bda0a162c\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:16] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"feff8215-75fe-40b2-916e-951435e048aa\",\"trace_id\":\"46d069ed-7c2b-4fdc-9679-9ec571a88271\"}\n[2026-05-11 11:18:16] 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\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:16] 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\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] 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\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"feff8215-75fe-40b2-916e-951435e048aa\",\"trace_id\":\"46d069ed-7c2b-4fdc-9679-9ec571a88271\"}\n[2026-05-11 11:18:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"feff8215-75fe-40b2-916e-951435e048aa\",\"trace_id\":\"46d069ed-7c2b-4fdc-9679-9ec571a88271\"}\n[2026-05-11 11:18:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:19] 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\":\"8e17d06e-8ffc-4d65-80f6-6b11aa27d46e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:19] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":3.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:19] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"5a640073-717d-40da-ad67-be02e37c56a2\",\"trace_id\":\"46d069ed-7c2b-4fdc-9679-9ec571a88271\"}\n[2026-05-11 11:18:20] 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\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] 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\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:20] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:21] 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\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:21] 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\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.24,\"average_seconds_per_request\":0.24} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:22] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"447782589921@txt.staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:22] local.INFO: [Prospect match] Cache miss {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\",\"crm\":\"hubspot\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:22] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:22] local.INFO: [HubSpot] importAccount {\"crm_provider_id\":\"749766179\",\"config_id\":2} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:22] local.INFO: [HubSpot] CRM Search requested {\"request\":{\"filterGroups\":[{\"filters\":[{\"propertyName\":\"associations.company\",\"operator\":\"EQ\",\"value\":\"749766179\"},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedwon\",\"4040964\",\"59247967\"]},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedlost\",\"4040965\",\"59247968\"]}]}],\"sorts\":[{\"propertyName\":\"modifieddate\",\"direction\":\"DESCENDING\"}],\"properties\":[\"dealname\",\"amount\",\"hubspot_owner_id\",\"pipeline\",\"dealstage\",\"closedate\",\"deal_currency_code\"],\"limit\":200}} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:22] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":10,\"total_elapsed_seconds\":0.32,\"average_seconds_per_request\":0.32} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612562,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612562,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612562,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"dd25d3ff-8533-4fac-bf1d-a0656234ea85\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] 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\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] 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\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:23] 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\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] 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\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] 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\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612561,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612561,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"726b3674-684a-493a-8b19-6872339717d0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] 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\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] 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\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] 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\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"447782589921@txt.staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612560,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612560,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612560,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"028beef2-7b15-4dd5-80e0-0629fd918aaf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] 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\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.89,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] 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\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] 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\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:26] 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\":\"4e01dc54-b912-46cc-bf4c-c6a0fd5627f0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"49d539c3-0bf6-4b41-a98a-fbca0ca960cd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"d6767fbf-b735-4480-843b-1d9d574b133d\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:27] 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\":\"04fa4b73-a2e0-4804-8722-18bdec56afab\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"1b1e56f6-7c50-4a00-988b-fcfda312d1c8\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"9ab5fb67-2687-4495-84e5-d9492e1ad9ae\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:28] 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\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] 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\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:29] 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\":\"95dabb64-e2cf-4104-9858-8b381c71b4d6\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"cdcd7a84-bff0-4af9-b585-aa58265b4692\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"3e0c6785-d4f6-48e6-a6b2-8289e6764698\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"e1db7837-d58d-4bd7-b7e5-f6263da1cf69\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"bc7e6057-3b4a-446f-8989-b0c166f4bec0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] 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\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:30] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] 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\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] 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\":\"8e7dd343-a500-4f4c-9e6d-55a13cdb2112\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612360,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612360} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612360,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612360,\"participants\":[{\"id\":999552,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999553,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999565,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612360,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.29,\"average_seconds_per_request\":0.29} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612360,\"participants_processed\":3,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612360} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612360,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612360,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"21abffc3-5241-4708-b3e0-abd2dd288cde\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612340,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612340} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612340,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612340,\"participants\":[{\"id\":999516,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999517,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999518,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999519,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612340,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.34,\"average_seconds_per_request\":0.34} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612340,\"participants_processed\":4,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612340} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612340,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612340,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"1b3ea0b3-7411-4358-9981-f09a275a33dd\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":0.75,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612339,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612339} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612339,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612339,\"participants\":[{\"id\":999514,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999515,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999540,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612339,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612339,\"participants_processed\":3,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612339} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612339,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612339,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"9361adaf-f558-47e1-8c17-29624076d6b0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612336,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612336} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612336,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612336,\"participants\":[{\"id\":999508,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999509,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999512,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999513,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612336,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612336,\"participants_processed\":4,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612336} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612336,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612336,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"df588253-5bf4-461b-848b-24cdc4f6b9ce\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612183,\"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\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612183} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612183,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612183,\"participants\":[{\"id\":999227,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999228,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612183,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612183,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612183} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612183,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612183,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1a3a820f-a56a-4ab6-a0b0-1a27257889a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612182,\"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\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612182} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612182,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612182,\"participants\":[{\"id\":999225,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999226,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612182,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612182,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612182} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612182,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612182,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"0ddb68fc-c275-46bd-98a1-95de8b8b0f8e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612181,\"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\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612181} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612181,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612181,\"participants\":[{\"id\":999223,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999224,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612181,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612181,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612181} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612181,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612181,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1a86dfbb-2141-4f4a-940b-43fbd1f8ddf1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612180,\"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\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612180} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612180,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612180,\"participants\":[{\"id\":999221,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999222,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612180,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612180,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612180} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612180,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612180,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"4f63b5e4-5027-4921-92f6-5421affdb43f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":611455,\"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\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611455} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611455,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":611455,\"participants\":[{\"id\":997961,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997962,\"user_id\":1460,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"support@staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/support%40staging.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\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.23,\"average_seconds_per_request\":0.23} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Prospect match] Cache miss {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\",\"crm\":\"hubspot\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:35] local.INFO: [HubSpot] importAccount {\"crm_provider_id\":\"749766179\",\"config_id\":2} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:35] local.INFO: [HubSpot] CRM Search requested {\"request\":{\"filterGroups\":[{\"filters\":[{\"propertyName\":\"associations.company\",\"operator\":\"EQ\",\"value\":\"749766179\"},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedwon\",\"4040964\",\"59247967\"]},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedlost\",\"4040965\",\"59247968\"]}]}],\"sorts\":[{\"propertyName\":\"modifieddate\",\"direction\":\"DESCENDING\"}],\"properties\":[\"dealname\",\"amount\",\"hubspot_owner_id\",\"pipeline\",\"dealstage\",\"closedate\",\"deal_currency_code\"],\"limit\":200}} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:35] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":10,\"total_elapsed_seconds\":0.27,\"average_seconds_per_request\":0.27} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":611455,\"team_id\":2,\"email\":\"aneliya.angelova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":611455,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611455} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611455,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":611455,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"05046735-5c60-4f00-bdf3-b8c4869f818e\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":611451,\"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\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611451} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611451,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":611451,\"participants\":[{\"id\":997955,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997956,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"support@staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/support%40staging.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\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:36] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:37] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.25,\"average_seconds_per_request\":0.25} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:37] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:37] local.INFO: [Prospect match] Cache miss {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\",\"crm\":\"hubspot\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:37] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:37] local.INFO: [HubSpot] importAccount {\"crm_provider_id\":\"749766179\",\"config_id\":2} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:37] local.INFO: [HubSpot] CRM Search requested {\"request\":{\"filterGroups\":[{\"filters\":[{\"propertyName\":\"associations.company\",\"operator\":\"EQ\",\"value\":\"749766179\"},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedwon\",\"4040964\",\"59247967\"]},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedlost\",\"4040965\",\"59247968\"]}]}],\"sorts\":[{\"propertyName\":\"modifieddate\",\"direction\":\"DESCENDING\"}],\"properties\":[\"dealname\",\"amount\",\"hubspot_owner_id\",\"pipeline\",\"dealstage\",\"closedate\",\"deal_currency_code\"],\"limit\":200}} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:38] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":10,\"total_elapsed_seconds\":0.44,\"average_seconds_per_request\":0.44} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":611451,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":3.16,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":611451,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611451} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611451,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":611451,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"471d15bb-ac2d-44a9-ad19-7e4dcffe21a5\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":611087,\"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\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611087} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611087,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":611087,\"participants\":[{\"id\":997368,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997369,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":611087,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":611087,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611087} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611087,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":611087,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"57ae5f63-477d-4d91-a9a3-8706092bf1e1\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":611076,\"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\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611076} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611076,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":611076,\"participants\":[{\"id\":997346,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997347,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":611076,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":611076,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":611076} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":611076,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":611076,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"2f7ba226-575b-41a7-a3d7-85c8b1fbe96b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610935,\"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\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610935} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610935,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610935,\"participants\":[{\"id\":997141,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997142,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610935,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610935,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610935} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610935,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610935,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"f2e5be67-dc9b-4211-994b-4582b631e128\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610915,\"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\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610915} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610915,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610915,\"participants\":[{\"id\":997104,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997105,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610915,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610915,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610915} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610915,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610915,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"b9f7b83f-19d2-4fc2-812d-a9d4dbaa6169\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610900,\"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\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610900} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610900,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610900,\"participants\":[{\"id\":997081,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997082,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610900,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610900,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610900} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610900,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:42] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610900,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"c45e3abe-1c98-4191-89dc-06c37af6a89a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610885,\"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\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610885} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610885,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610885,\"participants\":[{\"id\":997051,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997052,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610885,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610885,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610885} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610885,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610885,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"71c5715e-33f9-4ac4-a037-3f8d92f9323f\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610878,\"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\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610878} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610878,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610878,\"participants\":[{\"id\":997035,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997036,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610878,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610878,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610878} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610878,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:43] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610878,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"981ea94d-43c4-4549-a61a-38c0e6168aa4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610874,\"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\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610874} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610874,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610874,\"participants\":[{\"id\":997025,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997026,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610874,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610874,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610874} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610874,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610874,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"85e22bcd-46df-43fd-af31-f1fd6ea93304\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610867,\"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\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610867} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610867,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610867,\"participants\":[{\"id\":997011,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":997012,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610867,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610867,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610867} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:44] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610867,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610867,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"20f53637-e428-4d97-9c00-77128a6693bf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610764,\"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\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610764} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610764,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610764,\"participants\":[{\"id\":996951,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996952,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610764,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610764,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610764} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610764,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610764,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"31fb51e4-214a-4331-9ccb-e88251c31d23\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610617,\"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\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610617} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610617,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610617,\"participants\":[{\"id\":996641,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996642,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610617,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610617,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610617} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610617,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610617,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"1195ea0b-ff6f-4868-85b8-00e5910a6ebb\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610539,\"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\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610539} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610539,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610539,\"participants\":[{\"id\":996485,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996486,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610539,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610539,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610539} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610539,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610539,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"a12553b5-487b-4fe5-9f92-b4f1ea60e934\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:45] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":0.4,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610528,\"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\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610528} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610528,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610528,\"participants\":[{\"id\":996463,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996464,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610528,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610528,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610528} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610528,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610528,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"2cbcee52-8293-4463-b697-38db65d9f9c0\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610506,\"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\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610506} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610506,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610506,\"participants\":[{\"id\":996419,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996420,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610506,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610506,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610506} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610506,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610506,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"ef47bda9-11c9-43e9-9486-e279b2651ddf\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610497,\"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\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610497} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610497,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610497,\"participants\":[{\"id\":996401,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996402,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610497,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610497,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610497} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610497,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610497,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"5c552582-cc35-429e-a270-3c590292f4d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610490,\"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\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610490} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610490,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610490,\"participants\":[{\"id\":996385,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996386,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:46] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610490,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610490,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610490} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610490,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610490,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"1d9665e5-1818-48ff-9e74-77325bc59987\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610470,\"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\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610470} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610470,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610470,\"participants\":[{\"id\":996369,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996370,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610470,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610470,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610470} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610470,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610470,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"d7791858-9c04-4d8c-9509-dd01f1eae66b\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610462,\"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\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610462} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610462,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610462,\"participants\":[{\"id\":996353,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996354,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610462,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610462,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610462} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610462,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610462,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"7eda1fd5-8bda-4f9e-94d0-866e72813503\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610451,\"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\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610451} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610451,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610451,\"participants\":[{\"id\":996340,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996341,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610451,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610451,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610451} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610451,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610451,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"13f3d6e6-73ba-4280-ae4d-1687fc9104d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610438,\"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\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610438} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610438,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610438,\"participants\":[{\"id\":996320,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996321,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610438,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610438,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610438} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610438,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610438,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"107b5e13-81e1-4cb5-b64e-174334224d3a\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610426,\"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\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610426} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610426,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:47] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610426,\"participants\":[{\"id\":996306,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996307,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610426,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610426,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610426} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610426,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610426,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"f048c662-0e8e-4156-905b-0e237663e017\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610403,\"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\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610403} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610403,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610403,\"participants\":[{\"id\":996282,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":996283,\"user_id\":18,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"support@staging.jiminny.com\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"support@staging.jiminny.com\",\"domain\":\"jiminny.com\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610403,\"team_id\":2,\"email\":\"veselin.kulov@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610403,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610403} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610403,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610403,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"correlation_id\":\"0bf21e74-7810-4594-8fa0-ac9df6a5b1c4\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":610400,\"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\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610400} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610400,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":610400,\"participants\":[{\"id\":996275,\"user_id\":1460,\"contact_id\":null,\"lead_id\":null},{\"id\":996276,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":996277,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610400,\"team_id\":2,\"email\":\"aneliya.angelova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":610400,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":1460} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":610400,\"participants_processed\":3,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":610400} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":610400,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":610400,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ddac2edc-3725-4efd-b520-337c200e17d2\",\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\"}\n[2026-05-11 11:18:48] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] 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\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:48] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.51,\"average_seconds_per_request\":0.51} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"nikolay.nikolov@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [Prospect match] Cache miss {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\",\"crm\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [HubSpot] importAccount {\"crm_provider_id\":\"749766179\",\"config_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [HubSpot] CRM Search requested {\"request\":{\"filterGroups\":[{\"filters\":[{\"propertyName\":\"associations.company\",\"operator\":\"EQ\",\"value\":\"749766179\"},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedwon\",\"4040964\",\"59247967\"]},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedlost\",\"4040965\",\"59247968\"]}]}],\"sorts\":[{\"propertyName\":\"modifieddate\",\"direction\":\"DESCENDING\"}],\"properties\":[\"dealname\",\"amount\",\"hubspot_owner_id\",\"pipeline\",\"dealstage\",\"closedate\",\"deal_currency_code\"],\"limit\":200}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:49] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":10,\"total_elapsed_seconds\":0.35,\"average_seconds_per_request\":0.35} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":614382,\"team_id\":2,\"email\":\"nikolay.nikolov@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":614382,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:50] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":614382,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"adc1eae9-d4cb-481e-922f-179bac5a8934\"}\n[2026-05-11 11:18:50] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"nikolay.nikolov@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":614381,\"team_id\":2,\"email\":\"nikolay.nikolov@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":614381,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":614381,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"7fad664c-6cfc-402b-adac-89a4c8c5f4d1\"}\n[2026-05-11 11:18:50] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"nikolay.nikolov@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":615092,\"team_id\":2,\"email\":\"nikolay.nikolov@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":615092,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":615092,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8e4b7ef5-6a2b-4f08-8a0d-528e39fe7930\"}\n[2026-05-11 11:18:50] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"nikolay.nikolov@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":614436,\"team_id\":2,\"email\":\"nikolay.nikolov@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":614436,\"participants_processed\":2,\"exact_matches\":0,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":614436,\"remote_search\":true,\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"8df9c375-43bc-41b1-a457-36d722a98ea1\"}\n[2026-05-11 11:18:50] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:50] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:50] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:50] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"nikolay.nikolov@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nmalchev@gmail.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":614378,\"team_id\":2,\"email\":\"nikolay.nikolov@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":614378,\"participants_processed\":3,\"exact_matches\":1,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":614378,\"remote_search\":true,\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"d586f923-bac1-482b-a699-2c7c262dee65\"}\n[2026-05-11 11:18:51] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":0.84,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:18:51] 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\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:51] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:52] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/contact/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.28,\"average_seconds_per_request\":0.28} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:52] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"adelina.petrova@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:52] local.INFO: [Prospect match] Cache miss {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\",\"crm\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:52] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"domain\",\"identifier\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:52] local.INFO: [HubSpot] importAccount {\"crm_provider_id\":\"749766179\",\"config_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:52] local.INFO: [HubSpot] CRM Search requested {\"request\":{\"filterGroups\":[{\"filters\":[{\"propertyName\":\"associations.company\",\"operator\":\"EQ\",\"value\":\"749766179\"},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedwon\",\"4040964\",\"59247967\"]},{\"propertyName\":\"dealstage\",\"operator\":\"NOT_IN\",\"values\":[\"closedlost\",\"4040965\",\"59247968\"]}]}],\"sorts\":[{\"propertyName\":\"modifieddate\",\"direction\":\"DESCENDING\"}],\"properties\":[\"dealname\",\"amount\",\"hubspot_owner_id\",\"pipeline\",\"dealstage\",\"closedate\",\"deal_currency_code\"],\"limit\":200}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:53] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":10,\"total_elapsed_seconds\":0.43,\"average_seconds_per_request\":0.43} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:53] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612847,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:53] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:53] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612847,\"participants_processed\":3,\"exact_matches\":1,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:54] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:54] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:54] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612847,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"2dfb95b0-e84e-4956-8d2c-59d97cc1a442\"}\n[2026-05-11 11:18:54] 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}} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] 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}]} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [Prospect match] Resolved company domain from email {\"email\":\"adelina.petrova@jiminny.com\",\"domain\":\"jiminny.com\"} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612819,\"participants_processed\":3,\"exact_matches\":1,\"domain_matches\":1,\"best_match_found\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:54] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612819,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"trace_id\":\"6cee2988-85fe-44ce-ba47-56fc0392669c\",\"correlation_id\":\"da5b27d2-94da-4c45-a312-1c293b8ad38d\"}\n[2026-05-11 11:18:57] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":0.25,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"8c24420c-db53-4450-9cd8-db5d2426bd57\",\"trace_id\":\"5406d133-f6cd-4f5a-b463-9146e1dfb021\"}\n[2026-05-11 11:19:07] 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\":\"70d16739-7654-4185-99cb-49559aafc660\",\"trace_id\":\"d100f21a-5975-471a-b245-90b25b177c8f\"}\n[2026-05-11 11:19:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"70d16739-7654-4185-99cb-49559aafc660\",\"trace_id\":\"d100f21a-5975-471a-b245-90b25b177c8f\"}\n[2026-05-11 11:19:07] 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\":\"70d16739-7654-4185-99cb-49559aafc660\",\"trace_id\":\"d100f21a-5975-471a-b245-90b25b177c8f\"}\n[2026-05-11 11:19:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"91df8068-6c15-4614-947e-90f48574662c\",\"trace_id\":\"a9a86198-7521-4c0c-a89e-d23b34f2f8bf\"}\n[2026-05-11 11:19:12] 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\":\"91df8068-6c15-4614-947e-90f48574662c\",\"trace_id\":\"a9a86198-7521-4c0c-a89e-d23b34f2f8bf\"}\n[2026-05-11 11:19:15] local.NOTICE: Monitoring start {\"correlation_id\":\"6fae005c-3fcd-4718-86b0-f08f140f889c\",\"trace_id\":\"233ad400-a3ad-4093-8660-9e477cd6ca8f\"}\n[2026-05-11 11:19:15] local.NOTICE: Monitoring end {\"correlation_id\":\"6fae005c-3fcd-4718-86b0-f08f140f889c\",\"trace_id\":\"233ad400-a3ad-4093-8660-9e477cd6ca8f\"}\n[2026-05-11 11:19:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"08b79017-e665-425f-8048-21f93b1abf3b\",\"trace_id\":\"bb7a7ea5-30d3-4a13-9c3c-84bc1f9c26e7\"}\n[2026-05-11 11:19:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"08b79017-e665-425f-8048-21f93b1abf3b\",\"trace_id\":\"bb7a7ea5-30d3-4a13-9c3c-84bc1f9c26e7\"}\n[2026-05-11 11:19:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0c31163b-b05f-4d3f-9a66-a2ce01d94010\",\"trace_id\":\"3dfb6352-28a3-4c77-b6ff-a11e0a7821a0\"}\n[2026-05-11 11:19:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"0c31163b-b05f-4d3f-9a66-a2ce01d94010\",\"trace_id\":\"3dfb6352-28a3-4c77-b6ff-a11e0a7821a0\"}\n[2026-05-11 11:19:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"0c31163b-b05f-4d3f-9a66-a2ce01d94010\",\"trace_id\":\"3dfb6352-28a3-4c77-b6ff-a11e0a7821a0\"}\n[2026-05-11 11:19:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0c31163b-b05f-4d3f-9a66-a2ce01d94010\",\"trace_id\":\"3dfb6352-28a3-4c77-b6ff-a11e0a7821a0\"}\n[2026-05-11 11:20:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cb3a4a64-b00b-4f94-9e00-c190cd7a7a42\",\"trace_id\":\"acd43b75-f255-471f-9563-f03de03c7e23\"}\n[2026-05-11 11:20:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"cb3a4a64-b00b-4f94-9e00-c190cd7a7a42\",\"trace_id\":\"acd43b75-f255-471f-9563-f03de03c7e23\"}\n[2026-05-11 11:20:08] 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\":\"cb3a4a64-b00b-4f94-9e00-c190cd7a7a42\",\"trace_id\":\"acd43b75-f255-471f-9563-f03de03c7e23\"}\n[2026-05-11 11:20:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8ab6728e-9079-4166-bf97-fed4fb2ac7de\",\"trace_id\":\"508ecd6c-81db-47d4-8fad-d40b1e55cff3\"}\n[2026-05-11 11:20:10] 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\":\"8ab6728e-9079-4166-bf97-fed4fb2ac7de\",\"trace_id\":\"508ecd6c-81db-47d4-8fad-d40b1e55cff3\"}\n[2026-05-11 11:20:13] local.NOTICE: Monitoring start {\"correlation_id\":\"98b2a767-ff2a-4f82-866f-bf7dad58fe13\",\"trace_id\":\"ecb25ade-8dda-4d47-8bce-6b84e3c8fd0c\"}\n[2026-05-11 11:20:13] local.NOTICE: Monitoring end {\"correlation_id\":\"98b2a767-ff2a-4f82-866f-bf7dad58fe13\",\"trace_id\":\"ecb25ade-8dda-4d47-8bce-6b84e3c8fd0c\"}\n[2026-05-11 11:20:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"05f19e62-48e4-4c36-9577-648a2dd54abd\",\"trace_id\":\"e3d3acd1-5c23-4f37-9566-32a0cbd7a4eb\"}\n[2026-05-11 11:20:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"05f19e62-48e4-4c36-9577-648a2dd54abd\",\"trace_id\":\"e3d3acd1-5c23-4f37-9566-32a0cbd7a4eb\"}\n[2026-05-11 11:20:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d5c19bc5-1a17-4b6d-9f62-a6715a8005c9\",\"trace_id\":\"451385cf-1bcd-4e06-8412-e5d197f5f567\"}\n[2026-05-11 11:20:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"d5c19bc5-1a17-4b6d-9f62-a6715a8005c9\",\"trace_id\":\"451385cf-1bcd-4e06-8412-e5d197f5f567\"}\n[2026-05-11 11:20:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"d5c19bc5-1a17-4b6d-9f62-a6715a8005c9\",\"trace_id\":\"451385cf-1bcd-4e06-8412-e5d197f5f567\"}\n[2026-05-11 11:20:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d5c19bc5-1a17-4b6d-9f62-a6715a8005c9\",\"trace_id\":\"451385cf-1bcd-4e06-8412-e5d197f5f567\"}\n[2026-05-11 11:20:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a01c4c40-1c1e-4865-be1f-0aa63b4fd1b9\",\"trace_id\":\"cba182ec-cbe6-4d53-b1c6-253546138cc8\"}\n[2026-05-11 11:20:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-11 11:18:00, 2026-05-11 11:20:00] {\"correlation_id\":\"a01c4c40-1c1e-4865-be1f-0aa63b4fd1b9\",\"trace_id\":\"cba182ec-cbe6-4d53-b1c6-253546138cc8\"}\n[2026-05-11 11:20:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-11 11:18:00, 2026-05-11 11:20:00] {\"correlation_id\":\"a01c4c40-1c1e-4865-be1f-0aa63b4fd1b9\",\"trace_id\":\"cba182ec-cbe6-4d53-b1c6-253546138cc8\"}\n[2026-05-11 11:20:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a01c4c40-1c1e-4865-be1f-0aa63b4fd1b9\",\"trace_id\":\"cba182ec-cbe6-4d53-b1c6-253546138cc8\"}\n[2026-05-11 11:20:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b599f338-6a44-44d5-9f81-6fa300c4ea1b\",\"trace_id\":\"c7645418-4758-4410-83f2-8fe71ebf2ec2\"}\n[2026-05-11 11:20:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b599f338-6a44-44d5-9f81-6fa300c4ea1b\",\"trace_id\":\"c7645418-4758-4410-83f2-8fe71ebf2ec2\"}\n[2026-05-11 11:20:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3c9d7674-d005-4372-8a60-2e8ecb587584\",\"trace_id\":\"22a0bdee-d653-4113-963c-043a68a4a8be\"}\n[2026-05-11 11:20:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3c9d7674-d005-4372-8a60-2e8ecb587584\",\"trace_id\":\"22a0bdee-d653-4113-963c-043a68a4a8be\"}\n[2026-05-11 11:20:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1453203b-bac8-47ba-ac62-6369ac533fc2\",\"trace_id\":\"f176800e-9da8-4580-a332-56fa3402dbb7\"}\n[2026-05-11 11:20:31] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"1453203b-bac8-47ba-ac62-6369ac533fc2\",\"trace_id\":\"f176800e-9da8-4580-a332-56fa3402dbb7\"}\n[2026-05-11 11:20:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1453203b-bac8-47ba-ac62-6369ac533fc2\",\"trace_id\":\"f176800e-9da8-4580-a332-56fa3402dbb7\"}\n[2026-05-11 11:20:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2310f110-1f7e-4a28-b0c3-e5f8fc72688f\",\"trace_id\":\"9d6e8217-2f4e-4b23-8f36-8538f57064d9\"}\n[2026-05-11 11:20:33] local.INFO: Running conference:monitor:start command for activities in (2026-05-11 11:10:00, 2026-05-11 11:15:00] {\"correlation_id\":\"2310f110-1f7e-4a28-b0c3-e5f8fc72688f\",\"trace_id\":\"9d6e8217-2f4e-4b23-8f36-8538f57064d9\"}\n[2026-05-11 11:20:33] local.INFO: [conference:monitor:start] No activities found in (2026-05-11 11:10:00, 2026-05-11 11:15:00] {\"correlation_id\":\"2310f110-1f7e-4a28-b0c3-e5f8fc72688f\",\"trace_id\":\"9d6e8217-2f4e-4b23-8f36-8538f57064d9\"}\n[2026-05-11 11:20:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2310f110-1f7e-4a28-b0c3-e5f8fc72688f\",\"trace_id\":\"9d6e8217-2f4e-4b23-8f36-8538f57064d9\"}\n[2026-05-11 11:20:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"48a2dc23-76e1-4b34-b8a7-a7a957c71373\",\"trace_id\":\"b1788ca3-54cf-4031-b198-102838446996\"}\n[2026-05-11 11:20:37] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:15\",\"to\":\"11:20\"} {\"correlation_id\":\"48a2dc23-76e1-4b34-b8a7-a7a957c71373\",\"trace_id\":\"b1788ca3-54cf-4031-b198-102838446996\"}\n[2026-05-11 11:20:38] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:10\",\"to\":\"01:15\"} {\"correlation_id\":\"48a2dc23-76e1-4b34-b8a7-a7a957c71373\",\"trace_id\":\"b1788ca3-54cf-4031-b198-102838446996\"}\n[2026-05-11 11:20:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"48a2dc23-76e1-4b34-b8a7-a7a957c71373\",\"trace_id\":\"b1788ca3-54cf-4031-b198-102838446996\"}\n[2026-05-11 11:20:41] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:42] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:43] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:43] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"cb985c75-d47d-45c5-a37a-f6f0c95026fd\",\"trace_id\":\"bde7c5d1-1c73-488b-a11c-a2c8701ef310\"}\n[2026-05-11 11:20:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"28cf48be-a629-420c-a0a4-0d20fbd05838\",\"trace_id\":\"4fdaba19-5d8e-45db-a600-da048c8066fb\"}\n[2026-05-11 11:20:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6a6c06af-94cf-46bf-976e-55e401b3a588\",\"trace_id\":\"338c3b84-fc5a-404b-bed6-97341331ae68\"}\n[2026-05-11 11:20:48] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:48] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":60.0} {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:48] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-11T11:22:48.807561Z\"} {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:48] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"28cf48be-a629-420c-a0a4-0d20fbd05838\",\"trace_id\":\"4fdaba19-5d8e-45db-a600-da048c8066fb\"}\n[2026-05-11 11:20:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6a6c06af-94cf-46bf-976e-55e401b3a588\",\"trace_id\":\"338c3b84-fc5a-404b-bed6-97341331ae68\"}\n[2026-05-11 11:20:49] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:49] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:53] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c8d52370-b908-428c-b973-699db0be2136\",\"trace_id\":\"fabc1f54-e263-4ba0-b8ff-324f62e84f1f\"}\n[2026-05-11 11:20:53] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c8d52370-b908-428c-b973-699db0be2136\",\"trace_id\":\"fabc1f54-e263-4ba0-b8ff-324f62e84f1f\"}\n[2026-05-11 11:20:54] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}\n[2026-05-11 11:20:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"de84a4c9-d2c5-4950-8c2d-f400cee667bf\",\"trace_id\":\"223fd9b2-ed24-4083-98cd-1bc4040dbbd1\"}\n[2026-05-11 11:20:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"de84a4c9-d2c5-4950-8c2d-f400cee667bf\",\"trace_id\":\"223fd9b2-ed24-4083-98cd-1bc4040dbbd1\"}\n[2026-05-11 11:20:59] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"954d156d-8a4f-4592-a046-e16c5dd7d3bf\",\"trace_id\":\"ecc7aeb5-a4e6-4a0d-9ebd-4aeb260f5d55\"}","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}]...
|
-4421268307156197398
|
6797981614511765729
|
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
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\Middleware;
use Illuminate\Support\Facades\Log;
use Jiminny\Exceptions\RateLimitException;
/**
* Job middleware that catches RateLimitException from HubSpot API calls
* and releases the job back to the queue with the appropriate delay.
*/
class HandleHubspotRateLimit
{
private const int MAX_RETRY_DELAY = 600;
private const int MIN_RETRY_DELAY = 1;
private const int JITTER_SECONDS = 5;
public function handle(object $job, callable $next): void
{
try {
$next($job);
} catch (RateLimitException $e) {
$delay = max(self::MIN_RETRY_DELAY, min($e->getRetryAfter(), self::MAX_RETRY_DELAY));
// Add jitter to prevent thundering herd problem by randomizing retry times
$delay += random_int(0, self::JITTER_SECONDS);
$attempts = $job->attempts();
if ($attempts <= 3 || $attempts % 10 === 0) {
Log::info('[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', [
'job_class' => $job::class,
'attempts' => $attempts,
'retry_after' => $e->getRetryAfter(),
'delay' => $delay,
]);
}
$job->release($delay);
}
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
23/38
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
454
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:17:21] local.NOTICE: Monitoring start {"correlation_id":"885fde59-3852-4120-a620-af3da7ecce17","trace_id":"4cc10f53-5d39-418d-8e98-fe53d9bbff5f"}
[2026-05-11 11:17:21] local.NOTICE: Monitoring end {"correlation_id":"885fde59-3852-4120-a620-af3da7ecce17","trace_id":"4cc10f53-5d39-418d-8e98-fe53d9bbff5f"}
[2026-05-11 11:17:34] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a773fb28-5a0c-4b8f-a1b5-d57e6b81db90","trace_id":"fb6d8028-db7d-4ef2-b175-740f0a7b8b39"}
[2026-05-11 11:17:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a773fb28-5a0c-4b8f-a1b5-d57e6b81db90","trace_id":"fb6d8028-db7d-4ef2-b175-740f0a7b8b39"}
[2026-05-11 11:17:37] 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":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] 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":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:37] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] 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":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":1,"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\":\"019e16c1-c (truncated...)
"} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":1,"delay":4} {"correlation_id":"01554272-3758-416d-bcd8-0b07cf17fce3","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] 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":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] 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":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:38] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":1,"delay":3} {"correlation_id":"6f97c580-31f1-4723-80d8-b1046a615d37","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] 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":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] 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":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":1,"delay":1} {"correlation_id":"80fe8576-047a-495f-b42a-d75cb83d9591","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] 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":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] 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":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":1,"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\":\"019e16c1-c (truncated...)
"} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":1,"delay":2} {"correlation_id":"55cd98de-2b2f-4dd6-b0d5-36af698ea32d","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] 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":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614378,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] 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":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:39] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":1,"delay":3} {"correlation_id":"05cfe3c8-6fd4-4a49-ab3c-70dfd05e457b","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613840} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613840,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: ProspectCache - Searching DB for opportunity by owner {"account_id":244,"contact_id":4487,"owner_id":261} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: ProspectCache - Opportunity DB search results {"account_id":244,"contact_id":4487,"opportunity_id":299} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613840,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613840,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613840} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613840,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"8ccfe9b2-ef68-4a3d-95a5-5ca1667f2a59","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613833} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613833,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {"worker":"","peak_memory":"99.73 MB","elapsed_seconds":1.0,"update_target":"activities","should_iterate_again":false} {"correlation_id":"8c24420c-db53-4450-9cd8-db5d2426bd57","trace_id":"5406d133-f6cd-4f5a-b463-9146e1dfb021"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613833,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613833,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613833} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613833,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"41fb906c-1cf1-4cdb-b1bd-c638f6abc0fe","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613827} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613827,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613827,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613827,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613827} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613827,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"d1d42ab0-5c87-42e8-a91f-a56b538619ce","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613826} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613826,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613826,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613826,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613826} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613826,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"861e79c7-b5d3-4476-b429-0f1b4cf196a4","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613820} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613820,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613820,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613820,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613820} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613820,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"97a99ff2-5956-4d77-837b-790c01b09967","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613818} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613818,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:40] 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":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613818,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613818,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613818} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613818,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] 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":"300f80c3-6a45-4372-85a9-9fe439206596","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] 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":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613812} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613812,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] 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":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {"activity_id":613812,"team_id":2,"email":"[EMAIL]"} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [CrmActivityService] CRM matching completed {"activity_id":613812,"participants_processed":2,"exact_matches":1,"domain_matches":0,"best_match_found":true} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613812} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613812,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] 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":"7a348156-9d36-4f25-ad5e-4fbfce8fd82a","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] 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":"499c94c1-2716-49a2-9cdf-d5eb84f68ac6","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":613807} {"correlation_id":"499c94c1-2716-49a2-9cdf-d5eb84f68ac6","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":613807,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"499c94c1-2716-49a2-9cdf-d5eb84f68ac6","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] 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":"499c94c1-2716-49a2-9cdf-d5eb84f68ac6","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"499c94c1-2716-49a2-9cdf-d5eb84f68ac6","trace_id":"6cee2988-85fe-44ce-ba47-56fc0392669c"}
[2026-05-11 11:17:41] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"499c94c1-2716...
|
18553
|
NULL
|
NULL
|
NULL
|
|
18631
|
803
|
34
|
2026-05-11T11:37:36.130205+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778499456130_m2.jpg...
|
PhpStorm
|
faVsco.js – RateLimitException.php
|
True
|
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
<?php
declare(strict_types=1);
namespace Jiminny\Exceptions;
use Throwable;
class RateLimitException extends RuntimeException
{
public function __construct(
string $message = '',
private readonly int $retryAfter = 1,
?Throwable $previous = null,
) {
parent::__construct($message, 0, $previous);
}
public function getRetryAfter(): int
{
return max($this->retryAfter, 1);
}
}...
|
[{"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":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Exceptions;\n\nuse Throwable;\n\nclass RateLimitException extends RuntimeException\n{\n public function __construct(\n string $message = '',\n private readonly int $retryAfter = 1,\n ?Throwable $previous = null,\n ) {\n parent::__construct($message, 0, $previous);\n }\n\n public function getRetryAfter(): int\n {\n return max($this->retryAfter, 1);\n }\n}","depth":4,"bounds":{"left":0.11968085,"top":0.1963288,"width":0.30585107,"height":0.52673584},"on_screen":true,"lines":[{"char_start":0,"char_count":6,"bounds":{"left":0.11968085,"top":0.0,"width":0.012965426,"height":0.014365523}},{"char_start":7,"char_count":25,"bounds":{"left":0.11968085,"top":0.0,"width":0.06216755,"height":0.014365523}},{"char_start":33,"char_count":30,"bounds":{"left":0.11968085,"top":0.0,"width":0.07513298,"height":0.014365523}},{"char_start":64,"char_count":15,"bounds":{"left":0.11968085,"top":0.019952115,"width":0.036236703,"height":0.014365523}},{"char_start":80,"char_count":50,"bounds":{"left":0.11968085,"top":0.055067837,"width":0.12699468,"height":0.014365523}},{"char_start":130,"char_count":2,"bounds":{"left":0.11968085,"top":0.0726257,"width":0.0026595744,"height":0.014365523}},{"char_start":132,"char_count":33,"bounds":{"left":0.11968085,"top":0.090183556,"width":0.08277926,"height":0.014365523}},{"char_start":165,"char_count":30,"bounds":{"left":0.11968085,"top":0.10774142,"width":0.07513298,"height":0.014365523}},{"char_start":195,"char_count":46,"bounds":{"left":0.11968085,"top":0.12529927,"width":0.11635638,"height":0.014365523}},{"char_start":241,"char_count":37,"bounds":{"left":0.11968085,"top":0.14285715,"width":0.0930851,"height":0.014365523}},{"char_start":278,"char_count":8,"bounds":{"left":0.11968085,"top":0.16041501,"width":0.017952127,"height":0.014365523}},{"char_start":286,"char_count":53,"bounds":{"left":0.11968085,"top":0.17797287,"width":0.14993352,"height":0.014365523}},{"char_start":339,"char_count":6,"bounds":{"left":0.11968085,"top":0.19553073,"width":0.012965426,"height":0.014365523}},{"char_start":346,"char_count":41,"bounds":{"left":0.11968085,"top":0.2482043,"width":0.10372341,"height":0.014365523}},{"char_start":387,"char_count":6,"bounds":{"left":0.11968085,"top":0.26576218,"width":0.012965426,"height":0.014365523}},{"char_start":393,"char_count":42,"bounds":{"left":0.11968085,"top":0.28332004,"width":0.12732713,"height":0.014365523}},{"char_start":435,"char_count":6,"bounds":{"left":0.11968085,"top":0.3008779,"width":0.012965426,"height":0.014365523}},{"char_start":441,"char_count":1,"bounds":{"left":0.11968085,"top":0.31843576,"width":0.0026595744,"height":0.014365523}}],"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Exceptions;\n\nuse Throwable;\n\nclass RateLimitException extends RuntimeException\n{\n public function __construct(\n string $message = '',\n private readonly int $retryAfter = 1,\n ?Throwable $previous = null,\n ) {\n parent::__construct($message, 0, $previous);\n }\n\n public function getRetryAfter(): int\n {\n return max($this->retryAfter, 1);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1473948143375225302
|
-7046636380140500160
|
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
<?php
declare(strict_types=1);
namespace Jiminny\Exceptions;
use Throwable;
class RateLimitException extends RuntimeException
{
public function __construct(
string $message = '',
private readonly int $retryAfter = 1,
?Throwable $previous = null,
) {
parent::__construct($message, 0, $previous);
}
public function getRetryAfter(): int
{
return max($this->retryAfter, 1);
}
}...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18639
|
802
|
34
|
2026-05-11T11:37:46.375557+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778499466375_m1.jpg...
|
PhpStorm
|
faVsco.js – RateLimitException.php
|
True
|
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
<?php
declare(strict_types=1);
namespace Jiminny\Exceptions;
use Throwable;
class RateLimitException extends RuntimeException
{
public function __construct(
string $message = '',
private readonly int $retryAfter = 1,
?Throwable $previous = null,
) {
parent::__construct($message, 0, $previous);
}
public function getRetryAfter(): int
{
return max($this->retryAfter, 1);
}
}
Show Replace Field...
|
[{"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":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Exceptions;\n\nuse Throwable;\n\nclass RateLimitException extends RuntimeException\n{\n public function __construct(\n string $message = '',\n private readonly int $retryAfter = 1,\n ?Throwable $previous = null,\n ) {\n parent::__construct($message, 0, $previous);\n }\n\n public function getRetryAfter(): int\n {\n return max($this->retryAfter, 1);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Exceptions;\n\nuse Throwable;\n\nclass RateLimitException extends RuntimeException\n{\n public function __construct(\n string $message = '',\n private readonly int $retryAfter = 1,\n ?Throwable $previous = null,\n ) {\n parent::__construct($message, 0, $previous);\n }\n\n public function getRetryAfter(): int\n {\n return max($this->retryAfter, 1);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"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}]...
|
-8116851737558007364
|
-2434950907173958830
|
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
<?php
declare(strict_types=1);
namespace Jiminny\Exceptions;
use Throwable;
class RateLimitException extends RuntimeException
{
public function __construct(
string $message = '',
private readonly int $retryAfter = 1,
?Throwable $previous = null,
) {
parent::__construct($message, 0, $previous);
}
public function getRetryAfter(): int
{
return max($this->retryAfter, 1);
}
}
Show Replace Field...
|
NULL
|
NULL
|
NULL
|
NULL
|